模拟动态对象(constantize)rspec

时间:2015-01-22 07:19:31

标签: ruby-on-rails ruby-on-rails-4 rspec mocking rspec3

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

我想要存根/模拟动态对象,要测试的原始代码是:

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

我如何模拟该表演的结果?

谢谢,

晒。

2 个答案:

答案 0 :(得分:2)

根据您想要达到的目标,有很多选择。这是一个:

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 }

答案 1 :(得分:0)

感谢您的回答,

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

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