RSpec (2.10.0)、機械工 (2.0)、rspec-rails (2.10.1)、およびレール (2.3.6) を使用しているときに、RSpec::Mocks::ArgumentMatcher の使用に問題がありますanything
。
it
最初のブロックは成功しますが、2 番目のブロックでは次のエラーが発生します。
Failure/Error: Post.make!(:community => @community)
<Notification::Delayed (class)> received :create with unexpected arguments
expected: (#<RSpec::Mocks::ArgumentMatchers::AnyArgMatcher:0x00000104eff8f8>, #<User ...> , "event", "interval")
got: (#<Post>, <User...>, "event", "interval")
これらは it-blocks です (私はすでにそれらの順序、優先順位を変更し、1 回のテスト実行で個別に開始し、それぞれを開始しました)、それでも no.1 は成功し、no.2 は失敗します:
it "should create a delayed notification per default" do
Notification::Email.should_not_receive(:notification)
Notification::Delayed.should_receive(:create).with(anything, user, "event", "interval")
Post.make!(:community => @community)
end
it "should create a delayed notification on user request" do
NotificationSetting.make! :user => user, :event => 'event', :role => 'community,moderators', :interval => 'interval'
Notification::Email.should_not_receive(:notification)
Notification::Delayed.should_receive(:create).with(anything, user, 'event', 'interval')
Post.make!(:community => @community)
end
簡単にするために、この any() メソッドを使用する理由を省略しました。これは、最初の引数として渡されたオブジェクトが Post または Post のサブクラスである可能性があるためです。そのことを念頭に置いて、他のすべての ArgumentMatchers (:duck_type, :kind_of? ...) を試してみましたが、うまくいきませんでした。
私は完全に立ち往生しています、どうしてこのエラーが発生するのですか? 「引数マッチャー」セクションのドキュメントは、「引数は何でもかまいません」と言っているのではありませんか?では、どうしてこのようなエラーが発生するのでしょうか?そして次に私をゾッとさせるのは、エラーの出現に関する私のシフトレス性です。少なくとも両方で失敗するべきではありませんか?
どんな助けでも大歓迎です