我有一个我正在调用的函数,我需要测试它的参数。通常我会做类似的事情:
expect(my_obj).to_receive(:my_function).with(include('good_value'))
有没有办法翻转这个,就像是
expect(my_obj).to_receive(:my_function).with(exclude('bad_value'))
在返回值的规范中,这只是使用to_not
完成,但是当匹配参数时,这种形式的否定是不可用的。除了编写自定义匹配器之外,我在文档中找不到任何建议方法来做这些事情,这在这里感觉有些过分。
有没有一种简单的方法可以做到这一点而无需编写自定义匹配器?
答案 0 :(得分:2)
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'))
答案 1 :(得分:1)
您可以尝试:
http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ArgumentMatchers#hash_excluding-instance_method
expect(object).to receive(:message).with(hash_excluding(:key => val))