わかりましたので、このバグを修正するために何日も探していましたが、答えが見つからないようです. rspec を使用して Rails アプリをテストしようとしています。具体的には、現在コントローラーのテストを行っています。
私のコントローラーにはメソッドがあります
def update
changes = @match_preference.changes
...
if changes.values.collect(&:first).any?(&:nil?)
flash[:notice] = 'Hello'
end
...
end
私のテストファイルにはこれがあります
before :each do
@match_preference = FactoryGirl.create :match_preference
end
it "should do something on first change" do
# Line I have been changing a lot
@match_preference.changes.values.collect.stubs(:any?).returns(true)
post :update
flash.should_not be_nil
end
また、その行を stub_chain と他の多くの可能な答えに置き換えてみました。問題は機能にあることがわかりましたか?その関数を削除すると、collect の戻り値を変更でき、常に機能します。なぜ何もしないのですか?戻り値を設定できますか?
問題が @match_preferences にないことはわかっています。これは、テストの他の場所で使用し、機能するためです。
このコードからエラーは発生しません。戻り値が正しく変更されていないようです。