【发布时间】:2014-07-29 07:42:58
【问题描述】:
我创建了一个 double,我正在执行代码,该代码将使用一个方法和一个巨大的哈希作为参数来调用它,我想验证参数的一个键,然后返回一个特定的哈希。
这就是我正在做的事情
before :each do
allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
expect(@my_double).to receive(:do_stuff) do |arg|
expect(arg).to be_a(Hash)
expect(arg[:my_arg]).to eq(3)
end
TestObject.stuff() # will invoke do_stuff on the double
end
发生的情况是,第一次调用 do_stuff 时,它返回 true,这是 receive 块的结果,但在随后的调用中(在 pry 中测试)它正确返回 {stuff: 42} 但由于第一次调用错误,我的方法在返回时尝试调用[:stuff] 时出现异常。
我试图让allow 定义双精度的行为,所以我不想将返回值放在expect 的底部.. 但是有什么办法吗?
【问题讨论】:
-
或者有更清洁的方法吗?喜欢
expect(@my_double).to receive(:do_stuff).with(hash(my_arg: 3)) -
现在将
{stuff: 42}添加到我的期望块的底部,但我想要一个更清洁的解决方案