13

メソッド呼び出しチェーンで、メソッドの 1 つが特定のパラメーターを取得するかどうかをテストしようとしています。たとえば、以下のコードでは、 MyModel は method のパラメーター 0 を受け取る必要がありますoffset。残念ながら、以下のコードは機能しません。should_receive と stub_chain を混在させることはできないようです。どうすればこれを解決できますか?RSpec2を使用しています。

MyModel.should_receive(:offset).with(0).stub_chain(:tag_counts, :offset, :limit, :order).and_return([]) # does not work!

私がテストしようとしているコード:

tags = taggable.tag_counts.offset(page-1).limit(per_page).where(*where_clause).order("count DESC")

アップデート

RSpec の Google グループにも質問を投稿し、David (RSpec の作成者) が回答しました (David に感謝): http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0?hl=en

4

1 に答える 1

8

これは、現在の仕様の 1 つで私が行っていることの例です。これは少し不便ですが (行数が多いため)、動作します:

SearchPaginationModel.stub(:tag_counts) { SearchPaginationModel }
SearchPaginationModel.should_receive(:offset).with(0) { SearchPaginationModel }
SearchPaginationModel.stub_chain(:limit, :where, :order) { [] }
SearchPaginationModel.stub_chain(:tag_counts, :where, :count).and_return(1)
SearchPaginationModel.search_tags(:page => "1")

これは、たとえばSearchPaginationModel.tag_counts.offset(0).limit(X).where(X).order(X)、実際にoffset0 が設定されていることをテストします。

于 2011-03-13T20:15:03.747 に答える