0

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? ...) を試してみましたが、うまくいきませんでした。

私は完全に立ち往生しています、どうしてこのエラーが発生するのですか? 「引数マッチャー」セクションのドキュメントは、「引数は何でもかまいません」と言っているのではありませんか?では、どうしてこのようなエラーが発生するのでしょうか?そして次に私をゾッとさせるのは、エラーの出現に関する私のシフトレス性です。少なくとも両方で失敗するべきではありませんか?

どんな助けでも大歓迎です

4

2 に答える 2

0

説明できませんが、spec_helper に問題があるようです。別のプロジェクトでエラーを再現することはできません。

お邪魔になってすみません。最終的に問題が見つかったら、回答を投稿します。

于 2012-08-04T20:53:17.773 に答える
0

でテストできますか:

Notification::Delayed.should_receive(:create).with(kind_of(Post), user, 'event', 'interval')

Post のサブクラスも一種の Post です。

于 2012-07-31T18:08:44.097 に答える