模拟动态对象(常量化)rspec

Mocking dynamic objects (constantize) rspec

我正在使用 Rails 4.2、rspec 3 和 ruby 2.1.2。

我要stub/mock动态对象,要测试的原代码是:

self.property_a.action_class_name.constantize.new.perform(payload)

我如何模拟该执行的结果?

谢谢,

晒.

根据您想要实现的目标,有多种选择。这是一个:

mock_class = Class.new do
  def perform(payload)
    :foo
  end
end

allow(<object>).to receive_message_chain(:property_a, :action_class_name, :constantize) { mock_class }

感谢您的回答,

但我用另一种方式解决了它:

expect_any_instance_of(ModuleName::ClassName).to receive(:perform).and_return({a: 1})