Gordon
2011-Oct-19 05:30 UTC
[rspec-users] View spec for ''new'' keeps failing despite generated html has expected attribute
Hi guys, I have created a new resource, brands and here''s the spec for ''new'' which is failing. I do not know what''s going on despite checking it out for a few times already ------ app/views/brands/new.html.erb - start ------------- <h1>New brand</h1> <%= render ''form'' %> <%= link_to ''Back'', brands_path %> ------ app/views/brands/new.html.erb - start ------------- <h1>New brand</h1> <%= render ''form'' %> <%= link_to ''Back'', brands_path %> ------ app/views/brands/new.html.erb - end ------------- ------ app/views/brands/_form.html.erb - start ------------- <%= form_for(@brand) do |f| %> <% if @brand.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@brand.errors.count, "error") %> prohibited this brand from being saved:</h2> <ul> <% @brand.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :description %><br /> <%= f.text_field :description %> </div> <div class="actions"> <%= f.submit %> </div> <% end %> ------ app/views/brands/_form.html.erb - end ------------- --------spec/views/parts/new.html.erb_spec.rb - start -------- require ''spec_helper'' describe "brands/new.html.erb" do include Devise::TestHelpers before(:each) do @brand = assign( :brand, stub_model( Brand, :name => ''Apple'', :description => ''OS X and Ipods'' ) ) end it "renders new brand form" do render rendered.should have_selector( ''form'', :method => ''post'', :action => brands_path ) do |form| form.should have_selector("input", :type => "submit") end end end --------spec/views/parts/new.html.erb_spec.rb - end -------- My spec, spec/views/brands/new.html.erb_spec.rb fails with the following error: -------- Error message - start ------------------------ 1) brands/new.html.erb renders new brand form Failure/Error: form.should have_selector("input", :type => "submit") expected following output to contain a <input type=''submit''/> tag: # ./spec/views/brands/new.html.erb_spec.rb:21 # ./spec/views/brands/new.html.erb_spec.rb:17 -------- Error message - end ------------------------ When I do a view source on the page, I could very well see the submit button in the form. ----------- html form extract - start --------------------- <form accept-charset="UTF-8" action="/brands" class="new_brand" id="new_brand" method="post"><div style="margin:0;padding: 0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="hei0qtUuaZ7WcR/M+L97FURrdb+0a+N3szt64f7HrHk=" /></div> <div class="field"> <label for="brand_name">Name</label><br /> <input id="brand_name" name="brand[name]" size="30" type="text" /> </div> <div class="field"> <label for="brand_description">Description</label><br /> <input id="brand_description" name="brand[description]" size="30" type="text" /> </div> <div class="actions"> <input id="brand_submit" name="commit" type="submit" value="Create Brand" /> </div> </form> ----------- html form extract - end --------------------- What am I missing? thanks :)
Gordon
2011-Oct-19 07:36 UTC
[rspec-users] View spec for ''new'' keeps failing despite generated html has expected attribute
Fixed the issue as soon as I walked off my desk. Thought it was because of the resource object, @brand in spec/views/ parts/new.html.erb_spec.rb not being stubbed properly. Checked and I was right :) So, before(:each) do @brand = assign( :brand, stub_model( Brand, :name => ''Apple'', :description => ''OS X and Ipods'' ) ) end should have also had the ".as_new_record" method there. Reading below, my view specs pass :) before(:each) do @brand = assign( :brand, stub_model( Brand, :name => ''Apple'', :description => ''OS X and Ipods'' ).as_new_record ) end Case closed :)