在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
。
它是控制器测试渲染引擎中的错误吗?你知道怎么避免吗?
答案 0 :(得分: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>
我不知道为什么会这样,但它会使断言失败。