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