我创建了一个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
的底部......但是有什么方法可以解决它?
答案 0 :(得分:0)
想出答案是使用与我的第一条评论非常相似的undocumented argument matcher hash_including
expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))
这很好用。