【问题标题】:rspec: How to expect that page has the desired htmlrspec:如何期望该页面具有所需的 html
【发布时间】: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("&lt;dt title=\"No. days\"&gt;No. days:&lt;/dt&gt;\n&lt;dd&gt;7&lt;/dd&gt;")
  • "[...] 以及可能存在的任何空格。"关键是您试图在最终不是真正文本的内容中查找文本。将其视为 HTML,而不是文本。更好的是,以不同的方式进行测试。
  • 用调试器查看page.html。看看字符串是什么EXACTLY。您大概已经对空格的格式进行了假设,这是不正确的。为了让这个测试通过,期望值需要与生成的 HTML 完美匹配。
  • 或者作为一种更好的方法,正如上面 Dave 的帮助,最好以不同的方式进行测试。例如,您可以使用CSS selector 来查找dt 和dd 元素。甚至,在视图级别尝试测试它可能是矫枉过正?您能否改为测试为该页面提供支持的任何控制器/演示器,以确保它包含预期的原始数据?

标签: ruby rspec rspec-rails


【解决方案1】:

String 不安全HTML。

expect(page).to have_selector('dt[title="No. days"]', text: "No. days:")
expect(page).to have_selector('dd', text: "7")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2022-01-10
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多