【发布时间】:2020-08-28 11:29:29
【问题描述】:
下面是我从启动页面源中获取的 html。
<dt title="No. days">No. days:</dt>
<dd>7</dd>
在我的测试中,我必须期待相同的 html,我在下面尝试过
expect(page.html).to include("<dt title=\"No. days\">No. days:</dt><dd>7</dd>")
但得到了错误。 我需要在包含中写入什么格式才能期望相同的 html
提前谢谢你
【问题讨论】:
-
您将数据与演示文稿混为一谈;这会使测试对变化过于敏感。您缺少换行符以及可能存在的任何其他空格。
-
我什至尝试添加新行但没有成功
expect(page.html).to include("<dt title=\"No. days\">No. days:</dt>\n<dd>7</dd>") -
"[...] 以及可能存在的任何空格。"关键是您试图在最终不是真正文本的内容中查找文本。将其视为 HTML,而不是文本。更好的是,以不同的方式进行测试。
-
用调试器查看
page.html。看看字符串是什么EXACTLY。您大概已经对空格的格式进行了假设,这是不正确的。为了让这个测试通过,期望值需要与生成的 HTML 完美匹配。 -
或者作为一种更好的方法,正如上面 Dave 的帮助,最好以不同的方式进行测试。例如,您可以使用CSS selector 来查找
dt和dd元素。甚至,在视图级别尝试测试它可能是矫枉过正?您能否改为测试为该页面提供支持的任何控制器/演示器,以确保它包含预期的原始数据?
标签: ruby rspec rspec-rails