On 4 April 2011 02:00, Matt S. <li...@ruby-forum.com> wrote:
> For some reason I can't figure out how to make the fields_for tags
> render in the trivial example below; however, it works in the browser.
> What does #build_association do that my stubbed method does not
> replicate? (Or is that even the issue?)
>
> I appreciate the insight. Thanks! Matt Smith
>
> #spec/views/assets/new.html.erb_spec.rb
> describe "assets/new.html.erb" do
>  let(:asset) { mock_model("Asset").as_new_record.as_null_object }
>  let(:owner) { mock_model("Owner").as_new_record.as_null_object }
>
>  before(:each) do
>    asset.stub(:owner => owner)
>    assign(:asset, asset)
>  end
>
>  it "renders new asset form" do
>    render
>
>    assert_select "form", :action => assets_path, :method => "post" do
>      assert_select "input#asset_name", :name => "asset[name]" # passes
>      assert_select "input#asset_owner_attributes_name", :name =>
> "asset[owner_attributes][name]" # fails!
>    end
>  end
> end
>
> #app/views/assets/_form.html.erb
> <%= form_for(@asset) do |f| %>
>
>  <div class="field">
>    <%= f.label :name %><br />
>    <%= f.text_field :name %>
>  </div>
>
>  <%= f.fields_for :owner do |owner_fields| %>
>    <div class="field">
>      <%= owner_fields.label :name %>
>      <%= owner_fields.text_field :name %>
>    </div>
>  <% end %>
>
>  <div class="actions">
>    <%= f.submit %>
>  </div>
> <% end %>

In similar view specs, I've stubbed #owner_attributes= on the 'assets'
mock. I think Rails' nested form/assignment implementation does a
check on the existence of this method to make sure that the Asset
model does indeed accept nested assignment for that attribute.

Chris
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to