Why does rendered.should have_field pass when it shouldn't?

29 views
Skip to first unread message

David Zhang

unread,
Jul 3, 2011, 8:53:35 PM7/3/11
to rubyonra...@googlegroups.com
This is my new.html.erb_spec.rb:

  let(:meal) do
    mock_model("Meal").as_new_record.as_null_object
  end
  
  before(:each) do
    assign(:meal, meal)
  end

  it "shows the name text field" do
      render
      rendered.should have_field(:name) # checks for both the label and the text field... right?
    end
    
    it "shows the description text area" do
      pending "This passes when it shouldn't"
      render
      rendered.should have_field(:description) # have_field is for text fields and text areas (w/labels)... right?
    end

    it "shows the ingredients text area" do
      pending "This passes when it shouldn't"
      render
      rendered.should have_field(:ingredients)
    end
    
==========
This is my new.html.erb:
<!--admin/meals#new-->
<div id="meal_new">
<h3>New Meal</h3>
<%= render :partial => "form", :locals => { :meal => @meal, :button_name => "Create" } %>
</div>
It renders this partial...
==========
The partial - _form.html.erb

<%= form_for [:admin, meal] do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<!---Nothing about f.text_area :description or ingredients here! -->
<%= f.submit button_name %>
<% end %>

=============


The problem: rendered.should have_field(:description) and the one for ingredients are passing although I never specify the description / ingredient text fields or textareas in the form.  Why is this?  It seems that the presence of the label and text field for :name is enough to make any have_field pass...

(have_field DOES test for text fields or text areas, right?)
(why does the documentation basically tell you /nothing/? no example or anything.... http://rubydoc.info/github/jnicklas/capybara/master/Capybara/RSpecMatchers#have_field-instance_method)

Help would be greatly appreciated.

David Zhang

unread,
Jul 5, 2011, 7:19:39 PM7/5/11
to rubyonra...@googlegroups.com
Maybe this question is a little to wordy, so I'll just ask this:

Could someone just tell me if 

''''
it "shows the name text field" do
    render
    rendered.should have_field(:name)
end
''''

...checks for both the label and the text field?  How come when I have ONE text field in my view, all such have_field(:blahs) pass?  They shouldn't!  I must be missing something...
Reply all
Reply to author
Forward
0 new messages