Rspec has_css,have_selector和have_field有什么区别?

Jwa*_*622 6 rspec

我有这个html.erb Rails表单:

<h1 class=new_vendor_header>New Vendor Form</h1>

<%= form_for(@vendor) do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name, placeholder: "ex: Jeff" %>
  <%= f.submit "Submit" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这通过:

expect(page).to have_selector('input[placeholder="ex: Jeff"]')
Run Code Online (Sandbox Code Playgroud)

但这不是:

expect(page).to have_field('input[placeholder="ex: Jeff"]')
Run Code Online (Sandbox Code Playgroud)

这不是:

expect(page).to have_selector('input[placeholder="ex: Jeff"]')
Run Code Online (Sandbox Code Playgroud)

选择器是指HTML选择器,所以它引用了html元素?have_css我认为寻找CSS但它似乎做得更多.以下是备忘单中的示例:

response.body.should have_css("input", :count => 3) #True if there are 3 input tags in response
Run Code Online (Sandbox Code Playgroud)

这似乎寻找输入HTML选择器.

那么有什么区别,为什么其他两个在我的例子中失败了?

moh*_*him 5

从文档这里 have_css将调用has_selectorcss作为PARAM,因为has_selector可以处理css,xpath...

def have_css(css, options={})
      HaveSelector.new(:css, css, options)
end
Run Code Online (Sandbox Code Playgroud)