継承されたアプリのテストを理解しようとしていますが、助けが必要です。
このような仕様グループがたくさんあります (仕様を表示):
let(:job_post) { FactoryGirl.create(:job_post) }
# ...
before do
expect(view).to receive(:job_post).at_least(:once).and_return(job_post)
end
it "should render without error" do
render
end
...job_post
コントローラーで定義されたヘルパーメソッドです。(はい、@instance 変数を使用できた可能性があります。私はそれをリファクタリング中です)。
さて、私の意見では、ブロックexpect
内を使用するのは間違っています。before
ちょっと忘れてみましょう。
通常、上記のテストは緑色です。
ただし、行を削除するexpect
と、テストは失敗します。この場合expect
、ビューでメソッドをスタブ化しているようです。実際、に置き換えるexpect
とallow
まったく同じ効果があるようです。
通常、サーバーで実行すると、ビューが呼び出さjob_posts
れ、メッセージがコントローラーのヘルパー メソッドに送られます。これは、予想される動作です。
ただし、ここではexpect
期待値を設定すると同時に、view
固定の戻り値でメソッドをスタブ化しています。ビュー テンプレートがそのメソッドを呼び出すため、テストはパスします。
の予想外の「スタブ」副作用について、 rspec-mocks readmeexpect
でこれを見つけました。
(...) find が呼び出されない場合に例が失敗するように、メッセージの期待値を設定することもできます。
person = double("person") expect(Person).to receive(:find) { person }
RSpecは、スタブまたはモックしているメソッドを独自の test-double のようなメソッドに置き換えます。例の最後で、RSpec はメッセージの期待値を検証し、元のメソッドを復元します。
メソッドのこの特定の使用に関する経験はありますか?