On 28 Jun 2009, at 11:33, Michael wrote:
I'm trying to figure out how to test that the current_user does end up being attached to a new model that is being created which happens to be an Album. Here is the Controller code. def create @album = current_user.albums.new params[:album] if @album.save flash[:notice] = "The album was saved successfully." redirect_to @album else render :action => :new end end and here is a quick overview of how i have been testing so far. before(:each) do @album = mock_model(Album, :save => nil) Album.stub(:new).and_return(@album) end describe "authenticated user" do before(:each) do activate_authlogic UserSession.create Factory.build(:valid_user) end it "should build new album" do Album.should_receive(:new).with("title" => "album title", "description" => "album description").and_return(@album) post :create, :album => {"title" => "album title", "description" => "album description"} end it "should save the album" do @album.should_receive(:save) post :create end end How would i test to make sure that on the save "user_id" is present and matches the logged in user?
From the code you've shown us, it looks as though you need to spec the view, since I presume that's where the params[:album] which may or may not contain this user_id is built. The controller is just passing these params directly to the model's constructor, so it doesn't really seem to have much of a part to play as regards this specific field.
This might be a case where you'll get more value from a full-stack Cucumber acceptance test.
cheers, Matt Wynne http://mattwynne.net +447974 430184 _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users