Rspec-basic-syntax
提供:Dev Guides
RSpec-基本的な構文
*HelloWorld* の例のコードを詳しく見てみましょう。 まず、明確でない場合、 *HelloWorld* クラスの機能をテストしています。 これはもちろん、* say_hello()*メソッドを1つだけ含む非常に単純なクラスです。
ここに再び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* キーワードは *describe* に似ています。 クラス名や文字列引数を受け入れることもできます。 ブロックも *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のように、クラス名と文字列引数の両方を受け入れ、 *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* ステートメントの考え方は、通常の英語のように読むことです。 これは「変数メッセージが文字列「Hello World」に等しいことを期待してください」と声を出して言うことができます。 プロジェクトマネージャーなどの非技術的な利害関係者にとっても、説明的で読みやすいという考え方です。
The to keyword
*to* キーワードは、 *expect* ステートメントの一部として使用されます。 Expectationをfalseにしたい場合は、 *not_to* キーワードを使用して反対を表すこともできます。 toはドット* expect(message).to、*とともに使用されていることがわかります。これは実際には通常のRubyメソッドであるためです。 実際、すべてのRSpecキーワードは実際には単なるRubyメソッドです。
The eql keyword
*eql* キーワードは、Matcherと呼ばれる特別なRSpecキーワードです。 マッチャーを使用して、テストする条件のタイプをtrue(またはfalse)に指定します。
HelloWorldの expect ステートメントでは、 eql が文字列の等価性を意味することは明らかです。 Rubyにはさまざまなタイプの等価演算子があり、その結果、RSpecには対応するMatcherが異なることに注意してください。 後のセクションで、さまざまな種類のマッチャーについて説明します。