On 8 Sep 2010, at 16:20, Brennon Bortz wrote: > I've searched and searched, and just can't find an answer on the list or > elsewhere. Forgive me if I'm missing something... > > I've got the following bits of code: > > ### app/controllers/widget_layouts_controller.rb: > class WidgetLayoutsController < ApplicationController > def new > @widget = Widget.find(params[:widget_id]) > @widget_layout = WidgetLayout.new > end > end > > ### app/models/widget_layout.rb: > class WidgetLayout < ActiveRecord::Base > belongs_to :widget > end > > ### app/models/widget.rb: > class Widget < ActiveRecord::Base > has_one :widget_layout, :dependent => :destroy > end > > ### From config/routes.rb: > resources :widgets do > resource :widget_layout > end > > ### spec/widget_layouts/new.html_spec.rb: > require "spec_helper" > > describe "widget_layouts/new.html.erb" do > it "should render the new widget layout form" do > widget = stub_model(Widget) > assign(params[:widget_id], widget) > render > rendered.should have_selector("form", :method => "post", :action => > widget_widget_layout_path(widget)) > end > end > > ### app/views/widget_layouts/new.html.erb > <%= form_for @widget_layout, :url => widget_widget_layout_path(@widget) do > |f| %> > <%= f.submit "Submit Widget Layout Information" %> > <% end %> > > Here's the error I get when running that spec: > > widget_layouts/new.html.erb > should render the new widget layout form (FAILED - 1) > > Failures: > 1) widget_layouts/new.html.erb should render the new widget layout form > Failure/Error: render > No route matches {:controller=>"widget_layouts", :action=>"destroy"} > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb:398:in > `generate' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb:450:in > `generate' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb:478:in > `url_for' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/url_for.rb:132:in > `url_for' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/helpers/url_helper.rb:99:in > `url_for' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb:195:in > `widget_widget_layout_path' > # ./app/views/widget_layouts/new.html.erb:1:in > `_app_views_widget_layouts_new_html_erb___4529585855698402853_2170042420_599441616533773267' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/template.rb:135:in > `block in render' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/activesupport-3.0.0.rc/lib/active_support/notifications.rb:52:in > `block in instrument' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/activesupport-3.0.0.rc/lib/active_support/notifications/instrumenter.rb:21:in > `instrument' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/activesupport-3.0.0.rc/lib/active_support/notifications.rb:52:in > `instrument' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/template.rb:127:in > `render' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/render/rendering.rb:59:in > `block in _render_template' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/activesupport-3.0.0.rc/lib/active_support/notifications.rb:52:in > `block in instrument' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/activesupport-3.0.0.rc/lib/active_support/notifications/instrumenter.rb:21:in > `instrument' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/activesupport-3.0.0.rc/lib/active_support/notifications.rb:52:in > `instrument' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/render/rendering.rb:56:in > `_render_template' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/render/rendering.rb:26:in > `render' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/actionpack-3.0.0.rc/lib/action_view/test_case.rb:103:in > `render' > # > /Users/brennon/.rvm/gems/ruby-1.9.2...@stan/gems/rspec-rails-2.0.0.beta.20/lib/rspec/rails/example/view_example_group.rb:70:in > `render' > # ./spec/views/widget_layouts/new.html_spec.rb:7:in `block (2 levels) in > <top (required)>' > > I believe this is because params[:widget_id] isn't assigned when I'm > rendering new.html.erb. I know that's an improper usage of #assign up there, > but this is what I was trying to rectify (obviously incorrectly...) I'm > confused as to how to mock/stub and specify parent resource(s) when trying to > test views of children resources. What should I be doing differently? > > Also--not an RSpec question--that's the only way I can get that #form_for > call to work correctly. Everywhere I looked, it seemed that I could simply > use: > > form_for [...@widget, @widget_layout] do |f| %> > > but alas, all I get is the following errors: > _______________________ > NoMethodError in Widget_layouts#new > Showing > /Users/brennon/Documents/Programming/checkouts/rails_projects/stan/app/views/widget_layouts/new.html.erb > where line #1 raised: > > undefined method `widget_widget_layouts_path' for > #<#<Class:0x00000102c44ed0>:0x00000102c3fa48> > Extracted source (around line #1): > 1: <%= form_for [...@widget, @widget_layout] do |f| %> > 2: <%= f.submit "Submit Widget Layout Information" %> > 3: <% end %> > ________________________ > Any chance I might get some help on this one while I'm at it? :) Well, that was certainly a stupid mistake...figured it out with this:
it "should render the new widget layout form" do widget = stub_model(Widget, :id => "1") assign(:widget, widget) params[:widget_id] = widget.id assign(:widget_layout, mock_model(WidgetLayout).as_null_object) render rendered.should have_selector("form", :method => "post", :action => widget_widget_layout_path(widget)) end Now, can anyone provide some insight on a more elegant #form_for call for me? Thanks again, Brennon
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users