【问题标题】:Expect method call and proxy to original method with RSpec使用 RSpec 期望方法调用和代理到原始方法
【发布时间】:2011-03-16 02:11:27
【问题描述】:

我想发现缺少 BDD 的 :include 参数用于 ActiveRecord::Base.find 方法。所以我的想法是在规范中有这样的东西:

ActiveRecord::Base.should_receive(:find).once.and_proxy_to_original_method
parent = SomeClass.find 34
parent.child.should be_loaded
parent.other_children.should be_loaded

如果 #child 或 #other_children 关联没有被预先加载,期望应该失败,如下所示: “预期 ActiveRecord::Base.find 会被调用一次,但它被调用了 2 次,参数如下:1. ...; 2. ...”

有谁知道是否有一些匹配器可以这样工作或如何制作。

谢谢

【问题讨论】:

标签: ruby-on-rails rspec bdd controllers


【解决方案1】:

认为我遇到了同样的问题here。在您的特定情况下,我会这样做,我觉得这很干净。

original_method = ActiveRecord::Base.method(:find)
ActiveRecord::Base.should_receive(:find).once do (*args)
  original_method.call(*args)
end

我相信您可以扩展 Rspec Mocks::MessageExpectation 类以包含 and_proxy_to_original_method 方法,应该不会太难,但我没有看过。

【讨论】:

  • 嗯……我喜欢这个主意。将检查并返回结果。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2016-05-23
  • 1970-01-01
相关资源
最近更新 更多