On Jan 10, 2008, at 8:27 PM, James Deville wrote:

> We have a custom implementation of the Mother Object idea. It's inside
> of a module, basically like this:
>
> module Factory
>       %w(account friendship person invitation message asset email_address
> birth).each do |klass|
>               eval <<-EOF
>               def self.create_#{klass}(attributes = {})
>                       default_attributes = valid_#{klass}_attributes
>                       #{klass.camelize}.create! 
> default_attributes.merge(attributes)
>               end
>               EOF
>       end
>
>       def valid_message_attributes(options = {})
>               {
>               #some message options
>               }
>       end
>
>       #more valid_x_attributes methods
> end
>
> When I require this file in a spec file, Factory.create_person works
> fine. When I try to do it in a step file, Factory.create_person is
> defined, but it fails because valid_person_attributes is missing. If
> I'm in a debugger, and I do require 'model_factory' followed by
> Factory.create_person, same deal.
>
> Do we have a blank slate being loaded somewhere, and why is it wiping
> out require files?

Actually, though, I think John D. Hume is right (and this is a  
current bug with FixtureReplacement, as well): your valid_* methods  
are not class methods, but instance methods.

I bet the reason that it has worked in the past is because rspec does  
funny things with Module#include, and without having the time to look  
at the source, I'd bet that rspec ends up delegating to the class  
level (but story runner doesn't) - giving you the appearance that  
your software works, but in fact is just taking advantage of rspec's  
implementation.

Prove me wrong, if you can.

Best,

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

Reply via email to