On Nov 19, 2011, at 11:14 PM, Patrick J. Collins wrote: >> Please post the backtrace. > > Failures: > > 1) PostsController#store_post_params stores the last post params in the > session > Failure/Error: post :create, { :submit_action => submit_type.to_s, :post > => { :foo => "bar" } } > ActiveRecord::UnknownAttributeError: > unknown attribute: foo > # ./app/controllers/posts_controller.rb:107:in `new' > # ./app/controllers/posts_controller.rb:107:in `exposed_for_session' > # ./app/controllers/posts_controller.rb:9 > # ./app/controllers/posts_controller.rb:37:in `create' > # ./spec/controllers/post_spec.rb:6:in `do_post' > # ./spec/controllers/post_spec.rb:25 > > ------------- > > and exposed_for_session is: > > def exposed_for_session > Post.new(session.delete(:last_post_params)) if session[:last_post_params] > end > > Like I said, I tried stubbing out the new class method on post by doing > something like: > > fake_post = stub('Post', :save => true) > Post.stubs(:new).returns(fake_post) > > But I still get that same failure. > > Patrick J. Collins > http://collinatorstudios.com > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
I haven't used ActiveRecord in quite awhile (been using MongoDB), but it looks like you cannot instantiate a record with attributes that don't exist. I think you have two options here: 1.) Only use valid attributes in your params. 2.) Add `with` to your stub to exactly match the arguments to `.new`: Post.stubs(:new).with({last_post_params: {foo: 'bar'}}).returns(fake_post) _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users