On Dec 4, 2011, at 8:37 AM, Ants Pants wrote:

> On 4 December 2011 14:55, David Chelimsky <dchelim...@gmail.com> wrote:
> 
> On Dec 4, 2011, at 7:48 AM, Ants Pants wrote:
> 
>> Hello everyone,
>> 
>> I am trying to do the following ....
>> 
>> before(:each) do
>>     @valid_attributes = {:foo => 'bar'}
>>     @event_type = event_category.event_types.build(@valid_attributes) 
>>     $stderr.puts "**** #{@event_type.class} *****"
>> end
>> 
>> let (:event_category) { mock_model(EventCategory).as_null_object }
>> 
>> and the problem I'm having is that @event_type is coming back as 
>> EventCategory and not EventType.
>> 
>> Because of this problem, I thought, eh, I didn't know Rails did that!  So I 
>> checked use of .build in the real code and it does return EventType.
>> 
>> I'm obviously doing something stupidly wrong in the test but I just can't 
>> figure it out. 
>> 
>> Any pointers would be greatly appreciated, thank you.
> 
> event_category is a mock_model, not an EventCategory. Since it's declared 
> as_null_object, when it receives :event_types, it returns itself, and then 
> does the same for :build. So it's not really even an EventCategory: it's a 
> the same mock_model object, which is designed to lie about it's class in 
> order to be able to work with form builders.

> David,
> 
> Thanks very much for the reply. I was aware I was dealing with a mock, but I 
> thought in this instance it would fool event_types into thinking it was a 
> genuine object to allow the association to be made and return EventType.
> 
> So what are my options? To add the data to the DB or to build the object the 
> long way round
> @et = EventType.new(@avalid_attributes)
> @et.event_category = event_category ## mock
> @et.save!

Depends on where this is. I try to use the db in model specs, but avoid it in 
controller specs.

> While I have your ears, is it necessary to replicate the behaviour in the 
> model spec of how a controller builds an object? i.e use .build in the 
> controller and use .new in the spec. I mean, to me, it doesn't matter as all 
> I'm really concerned with is working with the object no matter how it's built.

Generally speaking, I agree, but every situation is a little different.

> Great piece of software and book, by-the-way. Thanks very much for it.

Thanks!
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to