rspec:'should_receive'具有多个参数期望值

Ste*_*fan 3 ruby testing integration-testing rspec

我有一个接收复杂参数(HTML字符串)的函数.我想检查有关此字符串的多个条件,即:

receiver.should_receive(:post_data).with(json_content).with(id_matching(5))
Run Code Online (Sandbox Code Playgroud)

多个with参数不起作用,任何替代方案?如果可以以某种方式制作复合匹配器,我很乐意定义自定义匹配器.

显然,我可以多次运行相同的测试并测试结果的不同内容,但这是一个需要几秒钟才能运行的集成测试,所以我不想让它更慢.

谢谢

编辑:

在撰写本文时,接受的答案(使用带有自定义描述的自定义匹配器)似乎是最佳选择.然而,它并不完美,理想情况下with会支持"这是预期类型的​​项目,但不是我们预期的那个"的概念,而不是纯二进制匹配.

Chr*_*nig 7

也许你甚至不需要自定义匹配器,块形式就足够了.

receiver.should_receive(:post_data) do |*args|
  json_content = args.first
  json_content.should_not be_empty
  json_content.should include "some string"
end
Run Code Online (Sandbox Code Playgroud)

请参阅RSpec Mocks文档,任意处理部分