On 21 Oct 2009, at 17:31, Elza wrote:


How can I spec the 3rd line of my controller?

What does that method do to the other objects in your domain? Can you describe that behaviour easily using mocks and stubs?

If not, you would be best to move the method out of the controller and onto another class, such as the User model. This is called 'listening to your tests'[1]

[1]http://www.mockobjects.com/book/listening-to-the-tests.html

update_successful, error_msg = update_channels_association

 def create
   @user = User.new(get_param(:user, :hash))

   if @user.save
     update_successful, error_msg = update_channels_association
     set_flash_if update_successful,
:resource_successfully_created.t(:resource => :user.t[:one]), error_msg

     redirect_to @user
   else
     render :action => :new
   end
 end
**************************
My spec

describe UsersController do
 describe "POST create" do
   ##############################################################
   should_require_login :post, :create

   ##############################################################
   describe "authenticated user" do
     ##############################################################
     before(:each) do
       login_as_user

       @user = mock_model(User, :save => nil)
       User.stub!(:new).and_return(@user)
       @params = {'name' => 'Mary'}
     end

     ##############################################################
     def do_post
       post :create
     end

     ##############################################################
     it "should build a new user" do
       User.should_receive(:new).with(@params).and_return(@user)
       post :create, :user => @params
     end

     ##############################################################
     it "should save the user" do
       @user.should_receive(:save)
       do_post
     end

     ##############################################################
     context "when the user saves successfully" do
       before(:each) do
         @user.stub!(:save).and_return true
         controller.should_receive(:update_channels_association)
       end


       it "should set a flash[:notice] user" do
         do_post
         flash[:notice].should ==
:resource_successfully_created.t(:resource => :user.t[:one])
       end
*************************

The error
'UsersController POST create authenticated user when the user saves
successfully should set a flash[:notice] user' FAILED
expected: "Usu�rio criado(a) com sucesso.",
    got: nil (using ==)

I know it is missing to verify the local variable update_successful.

If anyone can help me.
Cheers
EM
--
View this message in context: 
http://www.nabble.com/How-can-I-spec-protect-method-tp25995877p25995877.html
Sent from the rspec-users mailing list archive at Nabble.com.

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

cheers,
Matt

http://mattwynne.net
+447974 430184

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to