我单元测试Rails视图,该视图使用表单构建器来概括类似的代码(与AngularJS应用程序一起使用)。当视图在浏览器中正确呈现时,RSpec会使属性字符串中的某些字符呈现错误地转义:ng: {if: "model.val < 1}"
,例如,呈现为ng-if="model.val < 1"
。
表单构建器有一个方法(简化):
def if_step_at_or_before(step, &block)
content_tag :div, ng: {if: "myModel.step <= #{step}"}, &block
end
我在视图中使用它:
<%= f.if_step_at_or_before 3 do %>
…
<% end %>
这在浏览器中正确生成HTML:
<div ng-if="myModel.step <= 3">
…
</div>
然而,当我尝试在RSpec中测试它时,测试失败(前者通过说找到1个匹配元素,后者找到0):
before { render }
it "doesn't render with <" do
assert_select "[ng-if=?]", "myModel.step <= 3", 0
end
it "renders with <" do
assert_select "[ng-if=?]", "myModel.step <= 3", 1
end
因为RSpec显然将<
转义为<
的HTML转发,如:
<div ng-if="myModel.step <= 3">
…
</div>
当我没有使用表单构建器时,这不会发生。为什么RSpec渲染视图与表单构建器不正确,我该怎么做才能解决它?