【问题标题】:assert_select to test raw or html_safe unescaped contentassert_select 测试原始或 html_safe 非转义内容
【发布时间】:2012-09-16 15:14:34
【问题描述】:

在 Rails 3.2.8 控制器测试中,我想使用 assert_select 来控制使用 raw#html_safe 方法在我的视图中呈现的未转义字段的内容:

<div id="summary">
    <%= raw @doc.summary %>
</div>

但在我的测试中,这两个断言都失败了:

# Fixture loading in doc variable, get :show, assert_response ...
assert_select('#summary', doc.summary)
assert_select('#summary', doc.summary.html_safe)

如果我的摘要类似于&lt;p&gt;Stuff:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Stuff1&lt;/li&gt;&lt;li&gt;Stuff1&lt;/li&gt;&lt;/ul&gt;,那么测试告诉我,对于这两行,:

<"<p>Stuff:</p><ul><li>Stuff1</li><li>Stuff2</li></ul>">
expected but was
<"Stuff:\n  \n    Stuff1\n    Stuff2">

在测试模式下,它似乎使用\n 而不是 HTML 标记来呈现视图,就像为 CLI 显示转义一样。

但是当我启动服务器并在浏览器中显示我的页面时,这部分是用 HTML 标记呈现的,没有\n

这是控制器测试渲染引擎中的错误吗?你知道如何避免吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 escaping functional-testing actioncontroller


    【解决方案1】:

    找到解决办法:

    assert_select('#summary', :html => doc.summary)
    

    这样,应用于 DOM 选择的内容的任何转换也会在比较之前应用于第二个 arg。


    注意:不过,请注意编写固定装置的方式。

    以下语法:

    doc:
      summary: |
        <p>Stuff:</p><ul><li>Stuff1</li><li>Stuff2</li></ul>
    

    从 assert_select 中获得最后一个额外的\n,与:

    doc:
      summary: <p>Stuff:</p><ul><li>Stuff1</li><li>Stuff2</li></ul>
    

    我不知道为什么会发生这种情况,但它会使断言失败。

    【讨论】:

    • 添加strip 修复了\n 问题。所以应该是assert_select('#summary', html: doc.summary.strip)
    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2019-02-16
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多