1

私は 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 を明示的に呼び出さずに、テストを完了するために仕様で何をすべきかということです。前もって感謝します!

4

1 に答える 1

1

コードを正しく読んでいる場合は、inherited_resources最初にコードMarket.scopedが存在する場合はそれを使用しようとします。それで、あなたはscopedスコープを持っていますか?

于 2011-07-27T10:19:15.887 に答える