调用了 RR 模拟方法,但规范仍然失败



堆栈: 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.

是什么导致模拟对象无法捕获方法调用并通过规范?

似乎回

调正在重新查找记录并创建一个单独的订阅实例(因此不会命中模拟对象)。 我不确定为什么 - 似乎它的性能不是很好 - 但我找到了解决方法:

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

这将检查在任何Subscription实例上调用update_feature_policy!。 不是很好,但就我的目的而言,它有效。

如果有人能回答为什么会发生这种情况或提供更好的解决方案,请这样做。

相关内容

  • 没有找到相关文章

最新更新