I'm having a terrible time trying to test a nested route with rSpec. I can't seem to tell rSpec to expect the call @item.user. The following error message plagues me not matter how I try to fuss with the mock:
Spec::Mocks::MockExpectationError in 'ItemsController handling POST / items should redirect to the new course on successful save' Mock 'Item_1002' received unexpected message :user= with (#<User: 0x..fdb7bcd38 @name="User_1003">)
Any help would be greatly appreciated.
Here's my setup. Problem line indicated with ******
--routes.rb-- map.resources :users do |users| users.resources :items end
--items_controller-- def create @item = Item.new(params[:item]) @item.user = User.find(params[:user_id])
respond_to do |format| if @item.save ....etc.....
--items_controller_spec-- describe ItemsController, "create action" do
before do @item = mock_model(Item, :to_param => "1") @user = mock_model(User, :to_param => "1") Item.stub!(:new).and_return(@course) User.stub!(:find).and_return(@user) end
def post_with_successful_save ***** @item.should_receive(:user) @item.should_receive(:save).and_return(true) post :create, :user_id => 1, :item => {} end
it "should redirect to the new course on successful save" do post_with_successful_save response.should redirect_to(item_url("1")) end