在RSpec视图测试中搜索HTML元素

时间:2016-04-08 22:29:56

标签: ruby-on-rails-4 rspec views

作为我的视图规范的一部分,我有时想检查是否也为页面上的某个元素呈现了正确的文本。

假设呈现的HTML是 -

<div class="user-msg">
  <b>Thank You!</b>
</div>

我可以在我的视图规格中测试 -

expect(rendered).to match(/Thank You/)

然而,这可能会错误地失败或传递,具体取决于页面上是否有其他内容也表示“谢谢”。

如何在相关的具体<div>内进行搜索?如果这是一个功能测试,我会使用Capybara来选择节点 -

within(".user-mssg") { expect(page.body).to have_content("Thank You") }

如何找到特定的HTML元素(例如.user-msg)并在我的View规范中搜索?

谢谢!

编辑:“谢谢!”

1 个答案:

答案 0 :(得分:6)

rspec-html-matchers就是这样做的:

<h1>Simple Form</h1>
<form action="/users" method="post">
<p>
  <input type="email" name="user[email]" />
</p>
<p>
  <input type="submit" id="special_submit" />
</p>
</form>

规格:

expect(rendered).to have_tag('form', :with => { :action => '/users', :method => 'post' }) do
  with_tag "input", :with => { :name => "user[email]", :type => 'email' }
  with_tag "input#special_submit", :count => 1
  without_tag "h1", :text => 'unneeded tag'
  without_tag "p",  :text => /content/i
end