RSpec expect の () と {} の違い

RSpec の expect において

  • expect()
  • expect {}

はそれぞれ値を引数として取得するか、ブロックつきメソッドを引数とするかが異なります。

 

expect()

これにより、expect() ではすでに取得済みのレコードがあり、それが予期する値と等しいかどうかなどをTESTする際に便利です。

expect(response).to be_success
expect(response.status).to eq(200)

 

expect {}

一方 expect {} はexpect実行時に評価される関数を渡すことができるため、例えば Request spec を書くときなどに request 実行をブロックつきメソッドにして呼び出し時に実行したいというときに便利です。

let(:request) { post foobar_path, request_params, request_headers(user) }

...

expect { request }.to raise_error(APIErrors::Forbidden)

 

ちなみに expect の用法は公式のREADMEが詳しいです。  

参考