取反 RSpec 中的参数匹配器 3
Negate argument matcher in RSpec 3
我正在调用一个函数,我需要测试它的参数。通常我会做类似的事情:
expect(my_obj).to_receive(:my_function).with(include('good_value'))
有没有办法把它翻转过来,变成像
expect(my_obj).to_receive(:my_function).with(exclude('bad_value'))
在关于 return 值的规范中,这可以使用 to_not
简单地完成,但是当匹配参数时,这种否定形式似乎不可用。除了编写自定义匹配器之外,我在文档中找不到任何建议执行此操作的方法,这在这里感觉有点矫枉过正。
有没有一种无需编写自定义匹配器即可执行此操作的简单方法?
你可以试试:
http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ArgumentMatchers#hash_excluding-instance_method
expect(object).to receive(:message).with(hash_excluding(:key => val))
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'))
我正在调用一个函数,我需要测试它的参数。通常我会做类似的事情:
expect(my_obj).to_receive(:my_function).with(include('good_value'))
有没有办法把它翻转过来,变成像
expect(my_obj).to_receive(:my_function).with(exclude('bad_value'))
在关于 return 值的规范中,这可以使用 to_not
简单地完成,但是当匹配参数时,这种否定形式似乎不可用。除了编写自定义匹配器之外,我在文档中找不到任何建议执行此操作的方法,这在这里感觉有点矫枉过正。
有没有一种无需编写自定义匹配器即可执行此操作的简单方法?
你可以试试:
http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ArgumentMatchers#hash_excluding-instance_method
expect(object).to receive(:message).with(hash_excluding(:key => val))
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'))