- RSpec 教程
- RSpec - 首頁
- RSpec - 簡介
- RSpec - 基本語法
- RSpec - 編寫規範
- RSpec - 匹配器
- RSpec - 測試替身
- RSpec - 存根
- RSpec - 鉤子
- RSpec - 標籤
- RSpec - 主題
- RSpec - 助手
- RSpec - 元資料
- RSpec - 過濾
- RSpec - 期望
- RSpec 資源
- RSpec - 快速指南
- RSpec - 有用資源
- RSpec - 討論
RSpec - 基本語法
讓我們仔細看看HelloWorld示例的程式碼。首先,如果尚不清楚,我們正在測試HelloWorld類的功能。當然,這是一個非常簡單的類,只包含一個方法say_hello()。
以下是 RSpec 程式碼:
describe HelloWorld do
context “When testing the HelloWorld class” do
it "The say_hello method should return 'Hello World'" do
hw = HelloWorld.new
message = hw.say_hello
expect(message).to eq "Hello World!"
end
end
end
describe 關鍵字
describe是 RSpec 的一個關鍵字。它用於定義“示例組”。您可以將“示例組”視為測試的集合。describe關鍵字可以接受類名和/或字串引數。您還需要將塊引數傳遞給describe,其中將包含各個測試,或者像在 RSpec 中稱為“示例”。塊只是由 Ruby do/end關鍵字指定的 Ruby 塊。
context 關鍵字
context關鍵字類似於describe。它也可以接受類名和/或字串引數。您也應該在context中使用塊。context 的理念是它包含特定型別的測試。
例如,您可以像這樣指定具有不同上下文的示例組:
context “When passing bad parameters to the foobar() method” context “When passing valid parameters to the foobar() method” context “When testing corner cases with the foobar() method”
context關鍵字不是必需的,但它有助於新增有關其包含的示例的更多詳細資訊。
it 關鍵字
it是另一個 RSpec 關鍵字,用於定義“示例”。示例基本上是一個測試或一個測試用例。同樣,像describe和context一樣,it接受類名和字串引數,並且應該與塊引數一起使用,用do/end指定。在it的情況下,通常只傳遞字串和塊引數。字串引數通常使用“should”一詞,旨在描述it 塊內部應該發生什麼特定行為。換句話說,它描述了示例的預期結果。
請注意來自我們的 HelloWorld 示例的it 塊:
it "The say_hello method should return 'Hello World'" do
該字串清楚地說明了當我們在 HelloWorld 類的例項上呼叫 say hello 時應該發生什麼。RSpec 哲學的一部分,示例不僅僅是測試,它也是規範(規範)。換句話說,示例既記錄又測試了 Ruby 程式碼的預期行為。
expect 關鍵字
expect關鍵字用於在 RSpec 中定義“期望”。這是一個驗證步驟,我們在此檢查是否滿足特定預期條件。
從我們的 HelloWorld 示例中,我們有:
expect(message).to eql "Hello World!"
expect語句的理念是它們讀起來像普通的英語。您可以大聲朗讀為“期望變數 message 等於字串‘Hello World’”。其理念是它具有描述性並且易於閱讀,即使對於非技術利益相關者(如專案經理)也是如此。
The to keyword
to關鍵字用作expect語句的一部分。請注意,您還可以使用not_to關鍵字來表達相反的意思,當您希望期望為假時。您可以看到 to 與點一起使用,expect(message).to, 因為它實際上只是一個普通的 Ruby 方法。事實上,所有 RSpec 關鍵字實際上都只是 Ruby 方法。
The eql keyword
eql關鍵字是一個稱為匹配器的特殊 RSpec 關鍵字。您使用匹配器來指定您正在測試哪種型別的條件為真(或假)。
在我們的 HelloWorld expect語句中,很明顯eql表示字串相等。請注意,Ruby 中有不同型別的等號運算子,因此 RSpec 中有不同的相應匹配器。我們將在後面的章節中探討許多不同型別的匹配器。