[rspec-users] Missing methods

Scott Taylor mailing_lists at railsnewbie.com
Fri Jan 11 10:31:41 EST 2008


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


More information about the rspec-users mailing list