On Thu, Jul 30, 2009 at 6:13 PM, norm<[email protected]> wrote:
> I have two models:
>  Student has_many=>:grad_surveys
>    and
>  GradSurvey belongs_to=>:student
>
> I am testing the GradSurveysController#update method with
>
>  it "should only allow update if the correct token is presented" do
>   �...@params = {:id=>"1", :token=>"ab56e1b47", :survey=>{}}
>   �...@mock_grad_survey = mock_model(GradSurvey)
>    GradSurvey.should_receive(:accepts_as_authorized).with(@params
> [:id],@params[:token]).and_return(@mock_grad_survey)
>    put :update, @params
>    response.should render_template(:update)
>  end
>
> Inside the GradSurvey#accepts_as_authorized method is called the
> GradSurvey#student method. The test above fails with the message:
>         Mock 'GradSurvey_1034' received unexpected message :student
> with (no args)
>
> However I can make the test pass by adding the :student method to the
> @mock_grad_survey object, so
>     �...@mock_grad_survey = mock_model(GradSurvey, :student=>mock_model
> (Student))
>
> Why is it necessary for me to explicitly add the #student method to
> the mock GradSurvey model, it seems to me that it should come for free
> as part of the defined association, no? What am I not understanding
> here?
>
> thanks in advance for any light you are able to shed

mock_model creates a test double - it's not a real GradSurvey.

Try using stub_model instead:

@grad_survey = stub_model(GradSurvey)

This uses a real model instance that is modified to not talk to the database.

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

Reply via email to