在RSpec 3中否定参数匹配器



我调用了一个函数,需要测试它的参数。通常我会这样做:

expect(my_obj).to_receive(:my_function).with(include('good_value'))

有没有办法把它反过来,变成像

这样的东西呢?
expect(my_obj).to_receive(:my_function).with(exclude('bad_value'))

在返回值的规范中,这只是使用to_not完成的,但是在匹配参数时,这种形式的否定似乎不可用。我在文档中找不到任何建议的方法,除了编写一个自定义匹配器,在这里感觉有点小题大做。

是否有一个简单的方法,我可以做到这一点,而不必写一个自定义匹配器?

RSpec 3.1+允许您使用RSpec::Matchers.define_negated_matcher定义任何匹配器的否定版本:

RSpec::Matchers.define_negated_matcher :exclude, :include

一旦你这样做了,这应该工作:

expect(my_obj).to_receive(:my_function).with(exclude('bad_value'))

你可以试试:

http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ArgumentMatchers hash_excluding-instance_method

expect(object).to receive(:message).with(hash_excluding(:key => val))

最新更新