今週書いたRSpecで使用したマッチャについて確認しておきます。
意図した変更が行われていることを確かめる
expect内のブロックが評価する前後で、レシーバのメッセージやブロックを評価します。
もし値が同じオブジェクトなら、その前後のハッシュ値を使用して値が変更されたかどうかを確認します。
このマッチャを正しく動作させるためにはオブジェクトにハッシュを適切に実装する必要があります。
expect{ patch xxxxxxxxxxxxxxx_path(yyyyy) }.to change{zzzzzzzzzzzzzzz}
対象の値が変わっていないことを確認する
fromを指定するフォームをサポートしています。
notをつければいいだけと、とてもシンプルでわかりやすいなと思うことです。
expect( ).not_to change
Method: RSpec::Matchers#change
flash[:notice]の表示内容を確かめる
expect( )内の書き方はこれでOKです。
expect(flash[:notice]).to eq "xxxxxxxxxxxxxxxxxxxxx"
HTTPステータスコードが一致する場合に通過するテスト
数字のほか「:success」といった書き方も可能です。
expect(response).to have_http_status(404) expect(response).to have_http_status(:success)
Method: RSpec::Rails::Matchers#have_http_status
指定した値が含まれているか確認するテスト
ecpectのブロック内に引数の値が含まれていれば、通過します。
expect([1,2,3]).to include(3)
Method: RSpec::Matchers#include