gpt4 book ai didi

ruby-on-rails - assert_select 测试原始或 html_safe 未转义的内容

转载 作者:行者123 更新时间:2023-12-04 05:49:01 24 4
gpt4 key购买 nike

在 Rails 3.2.8 Controller 测试中,我想使用 assert_select使用 raw 控制在我的 View 中呈现的未转义字段的内容或 #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 渲染 View 而不是 HTML 标签,就像转义以显示 CLI 一样。

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

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

最佳答案

找到解决方案:

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

这样,无论对 DOM 选定内容应用何种转换,都会在比较前应用到第二个参数。


注意:尽管如此,请注意您编写固定装置的方式。

语法如下:

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>

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

关于ruby-on-rails - assert_select 测试原始或 html_safe 未转义的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com