これは哲学的な問題かもしれませんが...
rspec と rails を使って作業しているので、モック オブジェクトとスタブを使用してコントローラー テストをモデルから分離することに慣れてきました。また、その逆も同様です。
とはいえ、すべてがうまくつながっているわけではないという余韻が残ります。
例として、次のようなコントローラーの仕様があるとします。
it "passes a list of awesome cheeses to the view" do
Cheese.should_receive(:awesome).and_return( [ ] ) # one method name
get 'show'
assigns[:awesome_cheeses].should_not be_nil
end
そして、私の Cheese モデルの仕様は次のようになります。
it "should return a list of awesome cheeses" do
Cheese.create!(:name => "American", :is_awesome => false)
Cheese.create!(:name => "Gouda", :is_awesome => true)
Cheese.awesome_cheeses.should_not be_nil # different method name!
end
これらの両方の仕様に合格した場合でも、最初の仕様でスタブ化したメソッドが、2 番目の仕様で動作することを確認したメソッドと同じ名前ではないため、アプリは壊れます。
さて、これに対する 1 つの答えは「統合テストが必要です」ですが、私の統合テストが非常に徹底していない限り、このようなエラーを見逃す可能性があります。
コントローラー テストで期待するメソッドと、モデル テストで実際にテストするメソッドを自動的に比較する方法はありますか?