我想知道如何使用RSpec来存储为Ruby结构动态创建的方法。
我的代码如下所示:
def test_method
queue.poll do |message|
puts message.body
end
end
message
是一个结构。方法:body
当然不是内置在Ruby结构类中,而是作为外部库的一部分动态创建的。我想知道如何将通话存根到:body
。
我的RSpec测试看起来像这样:
let(:poller) { instance_double(ExternalLibrary::QueuePoller) }
let(:msg) { instance_double(Struct) }
before do
allow(ExternalLibrary::QueuePoller).to receive(:new).and_return(poller)
allow(poller).to receive(:poll).and_yield(msg)
end
it 'polls the queue' do
allow(msg).to receive(:body)
described_class.new.test_method
end
但我有以下错误:
1) polls the queue
Failure/Error: allow(msg).to receive(:body)
Struct does not implement: body
如何正确运行测试?谢谢你的帮助。
答案 0 :(得分:0)
您可以将哈希指定为let(:msg) { instance_double(Struct) }
的第二个参数。所以而不是:
let(:msg) { instance_double(Struct, body: '') }
使用:
let(:msg) { instance_double("Struct", body: '') }
不确定您是否会在引号中使用顶级结构:
pools
这一切都基于以下链接: https://relishapp.com/rspec/rspec-mocks/docs/verifying-doubles/dynamic-classes 这似乎解决了同样的问题