我有一个方法有以下签名

def my_method(first, second = {})

因此它可以通过两种方式调用。。。
my_method 'first'
my_method 'first', { second: 'value' }

我只对测试中第一个参数的值感兴趣,因此我尝试使用RSpec matcher语句来完成这项工作我的壁橱是
expect_any_instance_of(my_clazz).to receive(:my_method).with(code, anything).once

但如果我不传入第二个参数,则会失败,并出现以下错误
     expected: ('first', anything)
          got: ('first')

我知道你可以通过一个不同的匹配工具库进入with方法,我找不到任何东西可以这样做。
有谁能洞察这是如何实现的?

最佳答案

最简单的解决方案:

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

这两个案子你都能猜到。

关于ruby-on-rails - RSpec参数匹配器,用于包含可选参数的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24839783/

10-15 06:31