包含可选参数的方法的RSpec参数匹配器

时间:2014-07-19 11:14:19

标签: ruby-on-rails ruby rspec

我有一个具有以下签名的方法

def my_method(first, second = {})

因此可以用两种方式调用它......

my_method 'first'
my_method 'first', { second: 'value' }

我只对在测试中测试第一个参数的值感兴趣,因此我试图想出一个完成这项工作的RSpec匹配器语句。我得到的衣柜是

expect_any_instance_of(my_clazz).to receive(:my_method).with(code, anything).once

但是当我没有通过第二个参数传递以下错误时,这会失败

     expected: ('first', anything)
          got: ('first')

我知道你可以将不同匹配器的武器库传递到with方法中,我找不到任何可以通过这种方式做出选择的工作。

任何人都可以深入了解如何实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

最简单的解决方案:

expect(my_instance).to receive(:my_method) do |first_param,other_param|
  expect(first_param).to eq(code)
end

这样可以在两种情况下都匹配。

答案 1 :(得分:0)

避免存根响应,你应该添加' and_call_original'方法:

expect(my_instance).to receive(:my_method) do |first_param,other_param|
  expect(first_param).to eq(code)
end.and_call_original