在 double 上调用的方法上,对参数的期望
题
我创建了一个 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
..但有什么办法可以解决这个问题吗?
解决方案
找出答案是使用迄今为止 无证参数匹配器 hash_including
很像我的第一条评论
expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))
这很好用。
不隶属于 StackOverflow