Hi, all :) I have some working support helpers defined in spec/support/ controller_macros.rb.
I'm running "rake spec" before a 'git commit' and observed that the spec request for my 'brands' controller, spec/requests/brands_spec.rb fails because a support helper method I defined in spec/support/controller_macros.rb is not recognised. I got the following error: ----------------- Error extract: start --------------------------- spec/requests/brands_spec.rb:4:in `block in <top (required)>': undefined local variable or method `login_admin_user' for #<Class: 0x00000103bdf9a8> (NameError) from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/example_group.rb:142:in `module_eval' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/example_group.rb:142:in `subclass' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/example_group.rb:129:in `describe' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/dsl.rb:5:in `describe' from /Users/anexiole/projects/try_rails/spec/requests/brands_spec.rb: 3:in `<top (required)>' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/ active_support/dependencies.rb:235:in `load' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/ active_support/dependencies.rb:235:in `block in load' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/ active_support/dependencies.rb:227:in `load_dependency' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/ active_support/dependencies.rb:235:in `load' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/configuration.rb:419:in `block in load_spec_files' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/configuration.rb:419:in `map' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/configuration.rb:419:in `load_spec_files' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/command_line.rb:18:in `run' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/runner.rb:80:in `run_in_process' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/runner.rb:69:in `run' from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/ rspec/core/runner.rb:11:in `block in autorun' rake aborted! ----------------- Error extract: end --------------------------- I noticed that in the stack, the helper file, spec/support/ controller_macros.rb was never called. My model, view and controller specs all pass. This is what my spec/spec_helper.rb file looks like: ---------- spec/spec_helper.rb start ------------------- ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'webrat' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| # == Mock Framework # # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: # # config.mock_with :mocha # config.mock_with :flexmock # config.mock_with :rr #: config.mock_with :rspec config.include Devise::TestHelpers, :type => :controller config.extend ControllerMacros, :type => :controller config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end # # Rspec 2-https://github.com/plataformatec/devise # config.include Devise::TestHelpers, :type => :controller # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures # config.fixture_path = "#{::Rails.root}/spec/fixtures" # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. # config.use_transactional_fixtures = true end ---------- spec/spec_helper.rb end ------------------- This is what the failing request spec, spec/request/brands_spec.rb looks like. As this resource will not be available to non-admin users, it will redirect non-admin users to the root url. To have this spec passing, I am calling the method, login_admin_user which uses factory girl to create an admin user object (and sign in). This works without any problems in the controller specs, spec/controller, brands_controller_spec.rb. Strangely, it fails to work here regardless of where I put the call to login_admin_user right after 'describe "Brands" do' or ' describe "GET /brands" do'. ------------ spec/request/brands_spec.rb start ------------------ require 'spec_helper' describe "Brands" do login_admin_user describe "GET /brands" do it "works! (now write some real specs)" do get brands_path response.status.should be(200) end end end ------------ spec/request/brands_spec.rb end ------------------ Can someone please show me how do I ensure that helper methods defined in spec/support get called in spec/request specs? thank you :) _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users