测试需要 HTML 字符串的方法的好方法是啥?

Posted

技术标签:

【中文标题】测试需要 HTML 字符串的方法的好方法是啥?【英文标题】:What is a good way to test a method that expects an HTML string?测试需要 HTML 字符串的方法的好方法是什么? 【发布时间】:2013-09-04 21:11:25 【问题描述】:
foo.should_receive( :save ).with( html )

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

有没有办法检查 foo 应该收到的参数的长度?是否可以使用匹配器或html.should include '<html'之类的东西?

在 RSpec 中工作。

【问题讨论】:

我的问题是,如果是 html,为什么 foo 的 save care 呢? Foo 是一个报表模型,测试是检查运行报表的方法。我并不真正关心报告的输出,因为测试数据库中没有数据。但它应该保存报告,并且报告应该是一个 HTML 页面。 如果保存,将其转换为 HTML,它的作用很大。如果它验证它的输入是 HTML,那么它做的太多了。如果没有,它只会保存通过的任何内容,不管它是什么,以及 FileExists 测试,也许只需要使用一个小测试文件读取并与输入进行比较。 你是对的。报告模型做两件事:报告和生成 HTML。所以我们需要一个单独的模型来生成 HTML。 【参考方案1】:

如上面评论中所述,您可以使用正则表达式作为参数匹配器。

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

如果你想做更复杂的断言,你可以提供一个块:

foo.should_receive(:save).with do |arg|
  arg.should include '<html'
end

【讨论】:

虽然技术上是正确的答案,但真正的答案是我们不需要检查参数。正如托尼霍普金森在上面的 cmets 中提到的,检查参数是一种气味:模型在做不止一件事。【参考方案2】:

我不明白为什么使用您提供的代码不起作用。也许改用include?。您还可以使用正则表达式来确定它是否是 HTML。虽然对于这个具体的例子来说它可能有点多,但你可以确定关于 html 的更具体的事情,只要它有那个标签。

【讨论】:

以上是关于测试需要 HTML 字符串的方法的好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在R中,聚合字符串数据的好方法是啥

通过套接字以字符串形式发送数据的好方法是啥?

从用户代理中识别 iOS 设备的好方法是啥?

测试装饰器引发的异常的好方法是啥?

测试自定义视图的 onMeasure/onLayout/onDraw 方法的好方法是啥?

开发简单的序列号生成器/验证器的好方法是啥?