On 10 January 2012 14:56, David Chelimsky <dchelim...@gmail.com> wrote:
> On Jan 10, 2012, at 7:21 AM, Ants Pants wrote: > > > Under Ruby 1.8.7 - Rails 2.3.11 - Rspec 1: > > > > I have model_macros.rb under spec/spec_helpers and it runs beautifully. > > > > Dir[File.expand_path(File.join(File.dirname(__FILE__), 'spec_helpers', > '**', '*.rb'))].each { require f } > > config.extend(ModelMacros, :type => :model) > > > > Exactly the same code under Ruby 1.9.2 - Rails 3.1.3 - Rspec 2 gives me > ... uninitialized constant ModelMacros (NameError) > > > > Dir[Rails.root.join("spec/spec_helpers/**/*.rb")].each {|f| require f} > > config.extend(ModelMacros, :type => :model) > > > > .... which makes sense as it's missing the namespace (but how did it run > under 2.3.11. Is Ruby 1.8.7 more lenient? - I doubt it) > > That would make sense if Rails was autoloading (implicit) this, but it's > not - spec_helper.rb is loading it explicitly. I think the namespace thing > is a red herring. > > > So I added the namespace and I got rid of that error > > > > config.extend(SpecHelpers::ModelMacros, :type => :model) > > > > But sadly the methods that are called from within the model specs are > unable to be found...... Exception encountered: #<NoMethodError: undefined > method `it_should_require_attributes' > > > > This is only solved by including extend SpecHelpers::ModelMacros in the > model spec file. Not what I want. > > Which suggests that the config is being silently ignored, even though the > loading is working. > > > Is there something I am missing while migrating all my code? Is there > some really basic Ruby thing I have forgotten to do to get this module > included? > > > > I also tried config.include(SpecHelpers::ModelMacros, :type => :model) > but to no avail. > > That would never have worked under any version because "include" exposes > methods to the example scope, not the group scope: > > describe "something" do > # methods in modules added using extend are available here > it "does something" do > # methods in modules added using include are available here > end > end > > > Any help would be great, thank you. > > My best guess is that you don't need the namespace, and you should leave > Rails out of loading this. Try this: > > Dir["spec_helpers/**/*.rb"].each {|f| require f} > RSpec.configure do |config| > config.extend(ModelMacros, :type => :model) > end > > That should work to load the file, since RSpec adds"./spec" to the > $LOAD_PATH. > > If that doesn't work, it might be that ":type => :model" isn't working > correctly, so try "path => /spec\/model/" instead. Please report back and > let us know which, if either, works for you. > > HTH, > David > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > Hey David, thanks for the reply. Sadly nothing worked and here are my results With .... Dir["spec_helpers/**/*.rb"].each {|f| puts "loading ... #{f}"; require f} I didn't find any file to load and got the following error.... /home/anthony/Development/websites/ruby/GMFT/spec/spec_helper.rb:84:in `block in <top (required)>': uninitialized constant ModelMacros (NameError) With .... Dir["spec/spec_helpers/**/*.rb"].each {|f| puts "loading ... #{f}"; require f} I found a file to load but require couldn't find it .... loading ... spec/spec_helpers/model_macros.rb /home/anthony/.rvm/gems/ruby-1.9.2-p290@gmft313/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require': no such file to load -- spec/spec_helpers/model_macros.rb (LoadError) With .... Dir[Rails.root.join("spec/spec_helpers/**/*.rb")].each {|f| puts "loading ... #{f}"; require f} I found a file to load, apparently it loaded it but then the ModelMacros#method could not be found.... loading ... /home/anthony/Development/websites/ruby/GMFT/spec/spec_helpers/model_macros.rb /home/anthony/Development/websites/ruby/GMFT/spec/model/event_group_spec.rb:27:in `block in <top (required)>': undefined method `it_should_require_attributes' for #<Class:0xd25d5fc> (NoMethodError I also tried with :path in the third example but nada. I've also tried all of the above running rspec 2.7.0 and rspec-rails 2.7.0. No joy. It must be something I'm doing wrong. But what?!!! -ants
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users