3

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

receiver.should_receive(:post_data).with(json_content).with(id_matching(5))

多个with参数不起作用,还有其他选择吗?如果可以以某种方式制作复合匹配器,我很乐意定义自定义匹配器。

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

谢谢

编辑:

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

4

2 回答 2

8

也许您甚至不需要自定义匹配器,块形式对您来说就足够了。

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

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

于 2014-02-10T09:17:41.363 回答
3

您需要提供自定义匹配器,但您可以轻松定义错误报告,以便详细说明失败的原因和原因。请参阅https://github.com/dchelimsky/rspec/wiki/Custom-Matchers

特别是,自定义匹配器将作为 的参数提供,如https://github.com/rspec/rspec-mockswith的“参数匹配器”部分第一段的最后一句中所述。

至于错误报告,没有适用于此用例的自定义失败方法,但使用description自定义匹配器的方法生成显示为“预期”值的字符串,虽然不是其目的,但可以定义为输出任何内容你想要关于失败的比赛。

于 2013-07-11T20:20:15.540 回答