我创建了一个 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
定义 double 的行为,所以我不想将 return 放在expect
.. 的底部,但是有什么办法吗?