On 6.2.2008, at 11.16, David Currin wrote:
> Hi,
>
> This is probably straightforward to solve. I''m new to rspec so I
hope
> you''ll be patient with me. I''ve created a model method
which works in
> practice, but which rspec is not passing. I''m obviously not going
> about things in the right way in rspec so I''d appreciate any
advice
> offered.
>
> Here''s the (releveant parts of the) method which sets up a one to
many
> relationship between Company and Projects.
>
> def.self create_project(record)
> parent_company = Company.find_by_basecampid(record.company.id)
> project = self.find_or_initialize_by_basecampid(record.id)
> project.company_id = parent_company.id
> end
>
> In rspec I''ve got this:
>
> def parent_company_attributes
> {
> :id => 1,
> :basecampid => 448718,
> :name => "The Media Collective"
> }
> end
>
> before do
>
> mock_record
> Company.should_receive(:find_by_basecampid).
> with(parent_company_attributes[:basecampid]).
> and_return(parent_company_attributes)
You''re returning a hash here. If you call id for hash (like you do in
this case), it will return the object id, not the element with key :id.
I think what you want to do is to create a mock_model with that hash
and then stub Company.find_by_basecampid to return that mock object.
//jarkko
>
>
> @project = Project.create_project(record)
>
> end
>
> it "should populate company_id" do
> @project.company_id.should eql(parent_company_attributes[:id])
> end
>
>
> The problem is that it looks like rspec is using the object id rather
> than the id from parent_company_attributes. Here''s the failure
> message:
>
> 1)
> ''Project.create project record should populate
company_id'' FAILED
> expected 1, got 8817400 (using .eql?)
>
> Thanks for any insights
>
> David Currin
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
--
Jarkko Laine
http://jlaine.net
http://dotherightthing.com
http://www.railsecommerce.com
http://odesign.fi