[rspec-users] Expected "with" matches received "with" in error message

David Chelimsky dchelimsky at gmail.com
Mon Nov 3 10:30:20 EST 2008


On Mon, Nov 3, 2008 at 9:23 AM, Tom Hoen <lists at ruby-forum.com> wrote:
> I am trying to spec a controller that sets up a page to add two
> instances of an object to another (many to many :through).
>
> In my controller_spec, I have the following statements:
>
>      Student.should_receive(:new).and_return(mock_student)
>      mock_student.should_receive(:relatives).twice
>      mock_student.relatives.should_receive("<<").with(Relative.new(:parent
> => Parent.new)).twice
>
> When I run the test, I get the following error message:
>
> Spec::Mocks::MockExpectationError in 'StudentsController responding to
> GET new should expose a new student as @student'
> Mock 'NilClass' expected :<< with (#<Relative id: nil, parent_id: nil,
> student_id: nil, created_at: nil, updated_at: nil, child_lives_with:
> nil>) but received it with (#<Relative id: nil, parent_id: nil,
> student_id: nil, created_at: nil, updated_at: nil, child_lives_with:
> nil>)
>
> It seems what it is receiving and expecting are the same.
>
> Any ideas would be greatly appreciated.

ActiveRecord treats two unsaved records as unequal, even if they have
the same properties. Try this in script/console

Relative.new == Relative.new
=> false

To get this to work you'll have to either use real records (with IDs)
or stub whatever it is that is supplying the Relative and then expect
with(the_relative_you_supply_as_a_stub_value).

Make sense?

>
> Tom
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list