【问题标题】:Mocking dynamic objects (constantize) rspec模拟动态对象(常量化)rspec
【发布时间】:2015-01-22 07:19:30
【问题描述】:
我正在使用 Rails 4.2、rspec 3 和 ruby 2.1.2。
我要 stub/mock 动态对象,要测试的原始代码是:
self.property_a.action_class_name.constantize.new.perform(payload)
我如何模拟该表演的结果?
谢谢,
夏。
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-4
rspec
mocking
rspec3
【解决方案1】:
根据您想要实现的目标,有很多选择。这是一个:
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 }
【解决方案2】:
感谢您的回答,
但我用另一种方式解决了它:
expect_any_instance_of(ModuleName::ClassName).to receive(:perform).and_return({a: 1})