0

我创建了一个 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.. 的底部,但是有什么办法吗?

4

1 回答 1

0

想出答案是使用一个尚未记录的参数匹配器 hash_including,就像我的第一条评论一样

expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))

这很好用。

于 2014-07-29T09:03:16.163 回答