Rspec-quick-guide
RSpec-はじめに
RSpecは、Rubyプログラミング言語の単体テストフレームワークです。 RSpecはビヘイビア駆動型の開発ツールであるため、RSpecはJUnitのような従来のxUnitフレームワークとは異なります。 つまり、RSpecで記述されたテストは、テスト対象のアプリケーションの「動作」に焦点を当てています。 RSpecは、アプリケーションの動作方法ではなく、その動作、つまりアプリケーションの実際の動作に重点を置きません。
RSpec環境
まず、コンピューターにRubyをインストールする必要があります。 ただし、まだ以前に行っていない場合は、RubyのメインWebサイト(https://www.ruby-lang.org/en/documentation/installation[Ruby])からRubyをダウンロードしてインストールできます。
WindowsにRubyをインストールする場合は、WindowsのRubyインストーラーがhttp://rubyinstaller.org/[http://www.rubyinstaller.org]にあります。
このチュートリアルでは、メモ帳やコマンドラインコンソールなどのテキストエディターのみが必要です。 この例では、Windowsでcmd.exeを使用します。
cmd.exeを実行するには、[スタート]メニューをクリックして「cmd.exe」と入力し、Returnキーを押します。
cmd.exeウィンドウのコマンドプロンプトで、次のコマンドを入力して、使用しているRubyのバージョンを確認します-
これに似た以下の出力が表示されるはずです-
このチュートリアルの例では、Ruby 2.2.3を使用しますが、2.0.0以降のRubyのバージョンであれば十分です。 次に、Rubyインストール用にRSpec gemをインストールする必要があります。 gemは、独自のコードで使用できるRubyライブラリです。 gemをインストールするには、 gem コマンドを使用する必要があります。
ここで、Rspec gemをインストールしましょう。 cmd.exeウィンドウに戻り、次を入力します-
インストールされた依存gemのリストが必要です。これらは、rspec gemが正しく機能するために必要なgemです。 出力の最後に、次のようなものが表示されるはずです-
出力がまったく同じに見えなくても心配しないでください。 また、MacまたはLinuxコンピューターを使用している場合は、 sudo を使用して gem install rspec コマンドを実行するか、HomeBrewやRVMなどのツールを使用してrspec gemをインストールする必要があります。
はじめに、RSpecファイルを保存するディレクトリ(フォルダー)を作成しましょう。 あなたのcmd.exeウィンドウで、次を入力します-
次に、タイプ-
そして最後に、タイプ-
ここから、specという名前の別のディレクトリを作成し、次のように入力します-
RSpecファイルをこのフォルダーに保存します。 RSpecファイルは「スペック」と呼ばれます。 これがわかりにくい場合は、スペックファイルをテストファイルと考えることができます。 RSpecでは、「仕様」の短縮形である「仕様」という用語を使用します。
RSpecはBDDテストツールであるため、目標はアプリケーションの動作と、仕様に準拠しているかどうかに焦点を当てることです。 行動駆動開発では、仕様は「ユーザーストーリー」の観点から説明されることがよくあります。 RSpecは、ターゲットコードが正しく動作しているかどうか、つまり仕様に従っているかどうかを明確にするように設計されています。
Hello Worldコードに戻りましょう。 テキストエディタを開き、次のコードを追加します-
次に、これを上記で作成したspecフォルダーのhello_world_spec.rbという名前のファイルに保存します。 さて、cmd.exeウィンドウに戻って、このコマンドを実行します-
コマンドが完了すると、次のような出力が表示されます-
おめでとう、最初のRSpec単体テストを作成して実行しただけです!
次のセクションでは、引き続きRSpecファイルの構文について説明します。
RSpec-基本的な構文
ここに再びRSpecコードがあります-
describeキーワード
単語 describe はRSpecキーワードです。 「サンプルグループ」の定義に使用されます。 「サンプルグループ」はテストのコレクションと考えることができます。 describe キーワードは、クラス名および/または文字列引数を取ることができます。 また、ブロック引数を describe に渡す必要があります。これには、個々のテスト、またはRSpecで知られている「例」が含まれます。 ブロックは、Rubyの do/end キーワードで指定された単なるRubyブロックです。
コンテキストキーワード
たとえば、このような異なるコンテキストを持つ例のグループを指定することができます-
itキーワード
HelloWorldの例の* itブロック*に注意してください-
この文字列により、HelloWorldクラスのインスタンスでsay helloを呼び出すとどうなるかが明確になります。 RSpec哲学のこの部分、例は単なるテストではなく、仕様(仕様)でもあります。 言い換えれば、例では、Rubyコードの予想される動作を文書化してテストします。
expectキーワード
HelloWorldの例から、次のようになります-
HelloWorldの expect ステートメントでは、 eql が文字列の等価性を意味することは明らかです。 Rubyにはさまざまなタイプの等価演算子があり、その結果、RSpecには対応するMatcherが異なることに注意してください。 後のセクションで、さまざまな種類のマッチャーについて説明します。
RSpec-仕様の作成
この章では、新しいRubyクラスを作成し、独自のファイルに保存し、このクラスをテストするための個別の仕様ファイルを作成します。
まず、新しいクラスでは、 StringAnalyzer と呼ばれます。 単純なクラスで、ご想像のとおり、文字列を分析します。 このクラスには、* has_vowels?というメソッドが1つしかありません。このメソッドは、その名前が示すとおり、文字列に母音が含まれる場合はtrueを、含まれない場合はfalseを返します。 *StringAnalyzer の実装は次のとおりです-
HelloWorldセクションに従っている場合、C:\ rspec_tutorial \ specというフォルダーを作成しました。
hello_world.rbファイルがある場合は削除し、上記のStringAnalyzerコードをC:\ rspec_tutorial \ specフォルダーのstring_analyzer.rbというファイルに保存します。
StringAnalyzerをテストするためのspecファイルのソースは次のとおりです-
これを同じspecディレクトリに保存し、string_analyzer_test.rbという名前を付けます。
cmd.exeウィンドウで、C:\ rspec_tutorialフォルダーに移動し、次のコマンドを実行します:dir spec
次が表示されるはずです-
C:\ rspec_tutorial \ specのディレクトリ
次に、テストを実行します。次のコマンドを実行します:rspec spec
フォルダーの名前を rspec に渡すと、フォルダー内のすべてのspecファイルが実行されます。 この結果が表示されるはずです-
これが発生した理由は、デフォルトでは、 rspec は名前が「_spec.rb」で終わるファイルのみを実行するためです。 string_analyzer_test.rbの名前をstring_analyzer_spec.rbに変更します。 あなたはこのコマンドを実行することで簡単にそれを行うことができます-
さて、もう一度 rspec specを実行すると、次のような出力が表示されるはずです-
さて、string_analyizer.rbで行った変更を保存し、rspec specコマンドを再度実行すると、次のような出力が表示されるはずです-
おめでとうございます、specファイルの例(テスト)は合格です。 母音メソッドを持つ正規表現のバグを修正しましたが、テストは完全ではありません。
has vowelsメソッドを使用してさまざまなタイプの入力文字列をテストする例をさらに追加することは理にかなっています。
次の表は、新しい例で追加できる置換の一部を示しています(ブロックします)。
Input string | Description | Expected result with has_vowels? |
---|---|---|
‘aaa’, ‘eee’, ‘iii’, ‘o’ | Only one vowel and no other letters. | true |
‘abcefg’ | ‘At least one vowel and some consonants’ | true |
‘mnklp’ | Only consonants. | false |
‘’ | Empty string (no letters) | false |
‘abcde55345&??’ | Vowels, consonants, numbers and punctuation characters. | true |
‘423432%%%^&’ | Numbers and punctuation characters only. | false |
‘AEIOU’ | Upper case vowels only. | true |
‘AeiOuuuA’ | Upper case and lower vowels only. | true |
‘AbCdEfghI’ | Upper and lower case vowels and consonants. | true |
‘BCDFG’ | Upper case consonants only. | false |
‘ ‘ | Whitespace characters only. | false |
スペックファイルに追加するサンプルを決定するのはユーザー次第です。 テストする条件は多数ありますが、最も重要な条件のサブセットを特定し、コードを最適にテストする必要があります。
Sr.No. | Option/flag & Description |
---|---|
1 |
-I PATH Rubyのソースファイルを探すときに rspec が使用するロード(必須)パスにPATHを追加します。 |
2 |
-r, --require PATH 仕様に必要な特定のソースファイルを追加します。 ファイル。 |
3 |
--fail-fast このオプションを使用すると、rspecは最初の例が失敗した後に仕様の実行を停止します。 デフォルトでは、rspecは、失敗の数に関係なく、指定されたすべてのspecファイルを実行します。 |
4 |
-f, --format FORMATTER このオプションを使用すると、さまざまな出力形式を指定できます。 出力形式の詳細については、フォーマッターのセクションを参照してください。 |
5 |
-o, --out FILE このオプションは、テスト結果を標準出力ではなく出力ファイルFILEに書き込むようにrspecに指示します。 |
6 |
-c, --color rspecの出力で色を有効にします。 成功例の結果は緑色のテキストで表示され、失敗は赤色のテキストで印刷されます。 |
7 |
-b, --backtrace rspecの出力に完全なエラーバックトレースを表示します。 |
8 |
-w, --warnings rspecの出力にRubyの警告を表示します。 |
9 |
-P, --pattern PATTERN パターンPATTERNに一致する仕様ファイルをロードして実行します。 たとえば、-p“ *.rb”を渡すと、rspecは“ _spec.rb”で終わるファイルだけでなく、すべてのRubyファイルを実行します。 |
10 |
このオプションは、説明にテキストSTRINGを含むすべての例を実行するようにrspecに指示します。 |
11 |
-t, --tag TAG このオプションを使用すると、rspecはタグTAGを含むサンプルのみを実行します。 TAGはRubyシンボルとして指定されていることに注意してください。 詳細については、RSpecタグのセクションを参照してください。 |
RSpec-マッチャー
元のHello Worldの例を思い出すと、次のような行が含まれていました-
キーワードeqlは RSpec 「マッチャー」です。 ここでは、RSpecの他のタイプのマッチャーを紹介します。
平等/同一性マッチャー
オブジェクトまたは値の等価性をテストするマッチャー。
Matcher | Description | Example |
---|---|---|
eq | Passes when actual == expected | expect(actual).to eq expected |
eql | Passes when actual.eql?(expected) | expect(actual).to eql expected |
be | Passes when actual.equal?(expected) | expect(actual).to be expected |
equal | Also passes when actual.equal?(expected) | expect(actual).to equal expected |
例
上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-
比較マッチャー
値と比較するためのマッチャー。
Matcher | Description | Example |
---|---|---|
> | Passes when actual > expected | expect(actual).to be > expected |
>= | Passes when actual >= expected | expect(actual).to be >= expected |
< | Passes when actual < expected | expect(actual).to be < expected |
⇐ | Passes when actual ⇐ expected | expect(actual).to be ⇐ expected |
be_between inclusive | Passes when actual is ⇐ min and >= max | expect(actual).to be_between(min, max).inclusive |
be_between exclusive | Passes when actual is < min and > max | expect(actual).to be_between(min, max).exclusive |
match | Passes when actual matches a regular expression | expect(actual).to match(/regex/) |
例
上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-
クラス/タイプマッチャー
オブジェクトのタイプまたはクラスをテストするためのマッチャー。
Matcher | Description | Example |
---|---|---|
be_instance_of | Passes when actual is an instance of the expected class. | expect(actual).to be_instance_of(Expected) |
be_kind_of | Passes when actual is an instance of the expected class or any of its parent classes. | expect(actual).to be_kind_of(Expected) |
respond_to | Passes when actual responds to the specified method. | expect(actual).to respond_to(expected) |
例
上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-
True/False/Nilマッチャー
値がtrue、false、またはnilかどうかをテストするためのマッチャー。
Matcher | Description | Example |
---|---|---|
be true | Passes when actual == true | expect(actual).to be true |
be false | Passes when actual == false | expect(actual).to be false |
be_truthy | Passes when actual is not false or nil | expect(actual).to be_truthy |
be_falsey | Passes when actual is false or nil | expect(actual).to be_falsey |
be_nil | Passes when actual is nil | expect(actual).to be_nil |
例
上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-
エラーマッチャー
コードのブロックでエラーが発生した場合のテスト用のマッチャー。
Matcher | Description | Example |
---|---|---|
raise_error(ErrorClass) | Passes when the block raises an error of type ErrorClass. | expect {block}.to raise_error(ErrorClass) |
raise_error("error message") | Passes when the block raise an error with the message “error message”. | expect {block}.to raise_error(“error message”) |
raise_error(ErrorClass, "error message") | Passes when the block raises an error of type ErrorClass with the message “error message” | expect {block}.to raise_error(ErrorClass,“error message”) |
例
次のコードを error_matcher_spec.rb という名前のファイルに保存し、このコマンドで実行します- rspec error_matcher_spec.rb 。
上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-
RSpec-テストダブル
この章では、RSpec Mocksとも呼ばれるRSpec Doublesについて説明します。 Doubleは、別のオブジェクトを「スタンドイン」できるオブジェクトです。 あなたはおそらく、それが正確に何を意味するのか、なぜそれが必要なのか疑問に思っているでしょう。
たとえば、学校用のアプリケーションを作成していて、生徒の教室を表すクラスと生徒用の別のクラス、つまり教室クラスと生徒クラスがあるとします。 最初にいずれかのクラスのコードを記述する必要があるため、クラスルームクラスから始めましょう。
これは単純なクラスであり、list_student_namesというメソッドが1つあり、学生名のカンマ区切り文字列を返します。 さて、このクラスのテストを作成したいのですが、Studentクラスをまだ作成していない場合はどうすればよいでしょうか? テストDoubleが必要です。
また、Studentオブジェクトのように動作する「ダミー」クラスがある場合、ClassRoomテストはStudentクラスに依存しません。 これをテスト分離と呼びます。
ClassRoomテストが他のクラスに依存しない場合、テストが失敗すると、ClassRoomクラスにバグがあり、他のクラスにはないことがすぐにわかります。 現実の世界では、他の誰かが書いた別のクラスと対話する必要があるクラスを構築している可能性があることに留意してください。
これは、RSpec Doubles(モック)が役立つ場所です。 list_student_namesメソッドは、@ studentsメンバー変数の各Studentオブジェクトでnameメソッドを呼び出します。 したがって、nameメソッドを実装するDoubleが必要です。
RSpecの例(テスト)とともにClassRoomのコードを示しますが、Studentクラスが定義されていないことに注意してください-
上記のコードが実行されると、次の出力が生成されます。 経過時間は、コンピュータ上でわずかに異なる場合があります-
ご覧のとおり、 test double を使用すると、未定義または使用できないクラスに依存している場合でもコードをテストできます。 また、これは、テストに失敗した場合、クラスの問題であり、他の誰かが書いたクラスではないことがすぐにわかることを意味します。
RSpec-スタブ
RSpec Doubles(別名Mocks)に関するセクションをすでに読んでいれば、RSpecスタブはすでに見ています。 RSpecでは、スタブはよく「メソッドスタブ」と呼ばれます。これは、既存のメソッド、またはまだ存在しないメソッドを「代用する」特別なタイプのメソッドです。
ここにRSpec Doublesに関するセクションからのコードがあります-
この例では、allow()メソッドはClassRoomクラスをテストするために必要なメソッドスタブを提供します。 この場合、Studentクラスのインスタンスのように動作するオブジェクトが必要ですが、そのクラスは実際には存在しません(まだ)。 Studentクラスはname()メソッドを提供する必要があることを知っており、allow()を使用してname()のメソッドスタブを作成します。
注意すべきことの1つは、RSpecの構文が長年にわたって少し変わったことです。 RSpecの古いバージョンでは、上記のメソッドスタブはこのように定義されます-
上記のコードを使用して、2つの* allow()*行を古いRSpec構文に置き換えてみましょう-
上記のコードを実行すると、この出力が表示されます-
RSpecの例でメソッドスタブを作成する必要がある場合は、新しいallow()構文を使用することをお勧めしますが、ここでは古いスタイルを提供しているので、見たときにそれを認識できます。
RSpec-フック
単体テストを作成する場合、テストの前後にセットアップコードとティアダウンコードを実行すると便利なことがよくあります。 セットアップコードは、テストの条件を構成または「セットアップ」するコードです。 分解コードはクリーンアップを行い、後続のテストで環境が一貫した状態になるようにします。
一般的に、テストは互いに独立している必要があります。 テストのスイート全体を実行し、そのうちの1つが失敗した場合、テスト中のコードにバグがあり、前のテストが環境を一貫性のない状態にしたためではなく、失敗したことを確信する必要があります。
RSpecで使用される最も一般的なフックは、フックの前後です。 これらは、上記で説明したセットアップおよび分解コードを定義および実行する方法を提供します。 このサンプルコードを考えてみましょう-
このコードを実行すると、次の出力が得られます-
何が起こっているかを詳しく見てみましょう。 before(:each)メソッドは、セットアップコードを定義する場所です。 :each引数を渡すと、サンプルメソッドグループの各サンプルの前にbeforeメソッドを実行するように指示しています。 上記のコードの記述ブロック内の2つのitブロック。
@simple_class = SimpleClass.newという行では、SimpleClassクラスの新しいインスタンスを作成し、それをオブジェクトのインスタンス変数に割り当てています。 あなたが疑問に思うかもしれないオブジェクトは何ですか? RSpecは、describeブロックのスコープ内でバックグラウンドで特別なクラスを作成します。 これにより、このクラスのインスタンス変数に値を割り当てることができ、例のitブロック内でアクセスできます。 これにより、テストでよりクリーンなコードを簡単に記述できます。 各テスト(例)にSimpleClassのインスタンスが必要な場合、そのコードをbeforeフックに入れることができ、各例に追加する必要はありません。
「Creating a new instance of the SimpleClass class」という行がコンソールに2回書き込まれていることに注意してください。これは、各* itブロック*でフックが呼び出される前を示しています。
前述したように、RSpecにはafterフックもあり、beforeフックとafterフックの両方が引数として使用できます。 afterフックは、指定されたターゲットの後に実行されます。 すべてのターゲットは、すべての例の前/後にフックが実行されることを意味します。 各フックがいつ呼び出されるかを示す簡単な例を次に示します。
上記のコードを実行すると、この出力が表示されます-
RSpec-タグ
RSpecタグは、specファイルで特定のテストを実行する簡単な方法を提供します。 デフォルトでは、RSpecは実行するspecファイル内のすべてのテストを実行しますが、実行する必要があるのはそれらのサブセットのみです。 非常に高速に実行されるテストがいくつかあり、アプリケーションコードに変更を加えたばかりで、クイックテストを実行したい場合、このコードはRSpecタグでそれを行う方法を示します。
次に、上記のコードをtag_spec.rbという新しいファイルに保存します。 コマンドラインから次のコマンドを実行します。rspec --tag slow tag_spec.rb
この出力が表示されます-
実行オプション:\ {:slow ⇒ true}を含める
次に、次のコマンドを実行します:rspec --tag fast tag_spec.rb
この出力が表示されます-
ご覧のとおり、RSpecタグを使用すると、テストのサブセットを非常に簡単に作成できます。
RSpec-サブジェクト
RSpecの長所の1つは、テストを作成し、テストをクリーンにする多くの方法を提供することです。 テストが短く整理されていると、テストの記述方法の詳細ではなく、予想される動作に焦点を当てやすくなります。 RSpecのサブジェクトは、簡単な簡単なテストを作成できるもう1つのショートカットです。
このコードを検討してください-
実際はかなり明確ですが、例のコードの量を減らすためにRSpecのサブジェクト機能を使用できます。 これを行うには、personオブジェクトのインスタンス化を記述行に移動します。
このコードを実行すると、この出力が表示されます-
2番目のコードサンプルがどれほど単純であるかに注意してください。 最初の例で1つの* itブロック*を取得し、それを2つの* itブロック*に置き換えました。これにより、必要なコードが少なくなり、同様に明確になります。
RSpec-ヘルパー
RSpecの例には、再利用可能なコードを簡単に共有する方法が必要な場合があります。 これを達成する最良の方法は、ヘルパーを使用することです。 ヘルパーは基本的に通常のRubyメソッドであり、サンプル間で共有します。 ヘルパーを使用する利点を説明するために、このコードを考えてみましょう-
このコードは明確ですが、可能な限り繰り返しコードを減らすことを常にお勧めします。 create_and_walk_dog()と呼ばれるヘルパーメソッドを使用して上記のコードを取得し、この繰り返しの一部を減らすことができます。
上記のコードを実行すると、この出力が表示されます-
ご覧のとおり、犬のオブジェクトを作成して、ヘルパーを作成するためのロジックをプッシュすることができました。これにより、例がより簡潔になります。
RSpec-メタデータ
RSpecは柔軟で強力なツールです。 RSpecのメタデータ機能も例外ではありません。 メタデータは一般に「データに関するデータ」を指します。 RSpecでは、これは describe 、 context および* itブロック*に関するデータを意味します。
例を見てみましょう-
上記のコードを実行すると、この出力が表示されます-
メタデータは、RSpecファイル内のさまざまなスコープで変数を割り当てる方法を提供します。 example.metadata変数は、例および例グループに関する他の情報を含むRubyハッシュです。
たとえば、上記のコードを次のように書き換えてみましょう-
このコードを実行すると、example.metadataハッシュ内のすべての値が表示されます-
ほとんどの場合、このメタデータのすべてを使用する必要はありませんが、完全な説明値を見てください-
メタデータ変数と別の変数を持つコンテキストを持つサンプルグループは、コンテキストブロック内のメタデータ変数にアクセスできます。
これは、describeブロックの説明+含まれるコンテキストブロックの説明+ * itブロック*の説明から作成された文です。
ここで興味深いのは、これら3つの文字列が一緒になって通常の英語の文のように読めることです。 . . これはRSpecの背後にある考え方の1つであり、動作の英語の説明のように聞こえるテストを持っています。
RSpec-フィルタリング
RSpecフィルタリングはRSpecメタデータに基づいているため、このセクションを読む前にRSpecメタデータのセクションを読むことをお勧めします。
スペックファイルがあり、2つのタイプのテスト(例)が含まれていると想像してください:ポジティブ機能テストとネガティブ(エラー)テスト。 このように定義しましょう-
さて、上記のテキストを「filter_spec.rb」というファイルとして保存し、このコマンドで実行します-
次のような出力が表示されます-
ここで、このファイルの肯定的なテストのみを再実行したい場合はどうでしょうか? または、負のテストのみですか? これは、RSpec Filtersで簡単に行えます。 上記のコードをこれに変更します-
変更をfilter_spec.rbに保存し、このわずかに異なるコマンドを実行します-
これで、次のような出力が表示されます-
--tag positiveを指定することで、RSpecに、ポジティブメタデータ変数が定義されたサンプルのみを実行するように指示しています。 このようなコマンドを実行することで、負のテストでも同じことができます-
これらは単なる例であり、任意の名前でフィルターを指定できることに注意してください。
RSpecフォーマッター
フォーマッタにより、RSpecはさまざまな方法でテストからの出力を表示できます。 このコードを含む新しいRSpecファイルを作成しましょう-
さて、これをformatter_spec.rbというファイルに保存し、このRSpecコマンドを実行します-
次のような出力が表示されるはずです-
今、同じコマンドを実行しますが、今回はこのようにフォーマッタを指定します-
今回は同じ出力が表示されるはずです-
その理由は、「進行中」フォーマッターがデフォルトのフォーマッターだからです。 次に別のフォーマッタを試して、このコマンドを実行してみてください-
今、あなたはこの出力が表示されるはずです-
ご覧のとおり、出力は「doc」フォーマッタとは大きく異なります。 このフォーマッタは、ドキュメントのようなスタイルで出力を提示します。 テストに失敗したときに、これらのオプションがどのように見えるか疑問に思われるかもしれません(例)。 formatter_spec.rb のコードを次のように変更してみましょう-
期待値* expect(1 + 1).to eq(1)*は失敗します。 変更を保存し、上記のコマンドを再実行します-
さて、ドキュメントフォーマッタを試して、このコマンドを実行してください-
さて、失敗したテストでは、この出力が表示されるはずです-
失敗した例
rspec ./formatter_spec.rb:3#いくつかのテストを実行するときにRSpec Formatterがどのように機能するかを示すための仕様ファイル。テストは通常、expect()メソッドを少なくとも1回呼び出します。
RSpec Formatterは、テスト結果の表示方法を変更する機能を提供します。独自のカスタムFormatterを作成することも可能ですが、それはより高度なトピックです。
RSpec-期待
RSpecを学ぶとき、期待について多くを読むかもしれませんが、最初は少し混乱するかもしれません。 「期待」という用語が表示される場合、留意すべき主な2つの詳細があります-
- Expectationは、* expect()メソッドを使用する itブロック*内のステートメントです。 それでおしまい。 それ以上に複雑ではありません。 次のようなコードがある場合:* expect(1 + 1).to eq(2)、あなたの例には期待があります。 式 *1 + 1 が 2 に評価されることを期待しています。 ただし、RSpecはBDDテストフレームワークであるため、文言は重要です。 このステートメントをExpectationと呼ぶことで、RSpecコードがテスト対象のコードの「動作」を記述していることが明確になります。 アイデアは、ドキュメントのように読み取る方法で、コードの動作方法を表現しているということです。 期待構文は比較的新しいものです。 expect()メソッドが導入される前(2012年)、RSpecは should()メソッドに基づく別の構文を使用していました。 上記のExpectationは、古い構文の(1 + 1).should eq(2)*のように記述されています。
古いコードベースまたは古いバージョンのRSpecで作業する場合、期待の古いRSpec構文が発生する場合があります。 RSpecの新しいバージョンで古い構文を使用すると、警告が表示されます。
たとえば、このコードで-
実行すると、次のような出力が得られます-
古い構文を使用する必要がない限り、should()ではなくexpect()を使用することを強くお勧めします。