Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 测试需要HTML字符串的方法的好方法是什么?_Ruby_Rspec_Expectations - Fatal编程技术网

Ruby 测试需要HTML字符串的方法的好方法是什么?

Ruby 测试需要HTML字符串的方法的好方法是什么?,ruby,rspec,expectations,Ruby,Rspec,Expectations,其中html是一个html字符串,但我不想检查特定的html,因为这会使测试变得脆弱 有没有办法检查foo应该接收的参数的长度?是否可以使用matcher或类似于html的东西。应该包括“我不明白为什么使用您提供的代码就不起作用。可以使用包含?代替。您还可以使用正则表达式来确定它是否是HTML。虽然对于这个特定的示例,它可能有点多,但是您可以确定html的更具体的内容,只要它有那个标记。如上面的注释所述,您可以使用正则表达式作为参数匹配器 foo.should_receive( :save ).

其中
html
是一个html字符串,但我不想检查特定的html,因为这会使测试变得脆弱


有没有办法检查foo应该接收的参数的长度?是否可以使用matcher或类似于
html的东西。应该包括“我不明白为什么使用您提供的代码就不起作用。可以使用
包含?
代替。您还可以使用正则表达式来确定它是否是HTML。虽然对于这个特定的示例,它可能有点多,但是您可以确定html的更具体的内容,只要它有那个标记。

如上面的注释所述,您可以使用正则表达式作为参数匹配器

foo.should_receive( :save ).with( html )

foo.should\u接收(:save).with(/我的问题是为什么foo的save会关心它是否是html?foo是一个报告模型,测试是检查运行报告的方法。我并不真正关心报告的输出,因为测试数据库中没有数据。但是它应该保存报告,并且报告应该是一个html页面。如果save,则将其转换为html,这样做是正确的g到很多。如果它验证了它的输入是HTML,那么它做的太多了。如果它不验证,那么它只保存通过的任何内容,不管它是什么,一个文件存在测试,可能只需要用一个小测试文件读取和比较输入。你是对的。报告模型做两件事:报告和生成HTML。因此,我们需要一个单独的模型来生成HTML。虽然从技术上来说这是一个正确的答案,但真正的答案是我们不需要检查参数。正如Tony Hopkinson在上面的评论中提到的,检查参数是一种气味:模型正在做不止一件事。
foo.should_receive(:save).with(/<html/)
foo.should_receive(:save).with do |arg|
  arg.should include '<html'
end