3

在 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)

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

<"<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.

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

4

1 回答 1

3

找到解决方案:

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>

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

于 2012-09-19T15:20:05.377 回答