私は RSpec を初めて使用し、コントローラーは inherited_resources を使用しています。次のようなモック/スタブのセットアップがあります。
describe MarketsController do
def mock_market(stubs={})
@mock_market ||= mock_model(Market, stubs).as_null_object
end
describe "GET index" do
it "assigns all markets as @markets" do
Market.stub(:all){ [mock_market] }
get :index
assigns(:markets).should eql([mock_market])
end
end
end
assigns(:markets) に何もないため、この仕様は失敗します。追加した後:
class MarketsController
def index
@markets = Market.all
end
end
それは合格するので、それは、 inherited_resources がMarket.allを呼び出してすべての Market インスタンスを取得せず、したがってMarket.stub(:all)のスタブをバイパスするためだと思います。上で追加したindexメソッドは明らかに冗長であり、まったく存在すべきではありません。問題は、Market.all を明示的に呼び出さずに、テストを完了するために仕様で何をすべきかということです。前もって感謝します!