0

スタック: Rails 3.0.7、Mongoid 2.2.5、RSpec 2.11.0、RR 1.0.4

次のようなサブスクリプション モデルがあります。

class Subscription
  include Mongoid::Document

  embeds_many :addons

  after_save :update_feature_policy!

  def update_feature_policy!
    puts "Updating feature policy!"
  end
end

次のような仕様があります。

it "should update FeaturePolicy when adding an addon" do
  puts "Starting spec"
  mock(subscription).update_feature_policy! { true }
  subscription.addons << user_addon
  puts "Finished spec"
end

仕様は失敗しますが、コンソールに次の出力が表示されます。

Starting spec
Updating feature policy!
Finished spec

Failure/Error: mock(subscription).update_feature_policy! { true }
 RR::Errors::TimesCalledError:
   update_feature_policy!()
   Called 0 times.
   Expected 1 times.

モック オブジェクトがメソッド呼び出しをキャプチャして仕様を渡さない原因は何ですか?

4

1 に答える 1

0

コールバックがレコードを再検索し、サブスクリプションの別のインスタンスを作成していたようです(したがって、モックオブジェクトにヒットしていません)。理由はわかりませんが、パフォーマンスがあまり高くないようですが、回避策を見つけました。

it "should update FeaturePolicy when adding an addon" do
  puts "Starting spec"
  mock.instance_of(Subscription).update_feature_policy! { true }
  subscription.addons << user_addon
  puts "Finished spec"
end

update_feature_policy!これは、の任意のインスタンスで呼び出されているかどうかをチェックしますSubscription。素晴らしいとは言えませんが、私の目的では機能します。

誰かがこれが起こっている理由に答えたり、より良い解決策を提供したりできる場合は、そうしてください。

于 2012-09-20T18:32:10.287 に答える