【问题标题】:Rspec allow_any_instance_of to return instance idRspec allow_any_instance_of 返回实例 id
【发布时间】:2015-12-05 18:09:58
【问题描述】:

这样可以吗???

allow_any_instance_of(Object).to receive(:foo).and_return("hello #{instance.id}")

我可以根据实例返回消息吗?

【问题讨论】:

  • 你不能用allow_any_instance_of rspec 模拟来做到这一点,你只能使用它模拟一个实例的单个消息或多个消息。你能分享一下你想要实现的目标吗?

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rspec-rails


【解决方案1】:

是的,使用匹配器的“块”形式,它使您可以访问实例作为块的形式参数。您还需要确保Object(或您传递给allow... 的任何类)实现:foo(或您指定的任何方法)作为实例方法,否则allow... 将引发错误。同样,当然,您需要确保 id 也已实现。

这是一些使用Object 本身的示例代码:

class Object
  def id
    'bar'
  end
  def foo
  end
end
describe '' do
  it '' do
    allow_any_instance_of(Object).to receive(:foo) { |o| "hello #{o.id}" }
    puts Object.new.foo
  end
end

【讨论】:

    【解决方案2】:

    使用像 factory_girlfabrication 这样的 gem 来生成测试对象。

    这会让你做...

    this_object = Fabricate(:object)
    expect(this_object).to receive(:foo).and_return("hello #{this_object.id}")
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多