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

Pat Maddox pergesu at gmail.com
Mon Nov 3 10:50:45 EST 2008


"David Chelimsky" <dchelimsky at gmail.com> writes:

> 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?

Also I'd like to bring attention to "Mock 'NilClass' expected :<<".
mock_student.relatives is nil, but you'll want to return something.  As
for the actual problem, what David said :)

Pat


More information about the rspec-users mailing list