RSpec使用不正确的转义呈现视图

时间:2015-09-17 22:33:12

标签: ruby-on-rails ruby angularjs rspec

我单元测试Rails视图,该视图使用表单构建器来概括类似的代码(与AngularJS应用程序一起使用)。当视图在浏览器中正确呈现时,RSpec会使属性字符串中的某些字符呈现错误地转义:ng: {if: "model.val < 1}",例如,呈现为ng-if="model.val &lt; 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 &lt;" do
  assert_select "[ng-if=?]", "myModel.step &lt;= 3", 0
end

it "renders with <" do
  assert_select "[ng-if=?]", "myModel.step <= 3", 1
end

因为RSpec显然将<转义为&lt;的HTML转发,如:

<div ng-if="myModel.step &lt;= 3">
  …
</div>

当我没有使用表单构建器时,这不会发生。为什么RSpec渲染视图与表单构建器不正确,我该怎么做才能解决它?

0 个答案:

没有答案