2014-04-30 4 views
0

Je cours Rails 4, en essayant de mettre en place un test d'intégration avec Rspec et Capybara. Je veux mettre en place la garde pour exécuter le 'test de zeus'. chaque fois que je fais des changements. Le problème est, à chaque fois que quelque chose forment le DSL Capybara est appelé, ou chaque fois que je tente d'utiliser les aides de route, je suis erreurs donné comme ceci:Garde ne charge pas Capybara DSL

undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x007f55682c6d60> 

Si je remplace root_path avec «/» il se:

undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x007f556833bbb0> 

Si je viens de lancer 'rspec spec.' ou 'test de zeus'. ça fonctionne bien.

J'ai essayé d'enlever le 'test de zeus de' cmd: '. option de mon Guardfile, mais j'ai les mêmes problèmes. Il semble clair que le problème est avec Guard et sans rapport avec zeus.

Dans mon Gemfile:

group :development, :test do 
    gem 'capybara' 
    gem 'rspec-rails' 
    gem 'factory_girl_rails' 
    gem 'guard-rspec', require: false 
    gem 'better_errors' 
    gem 'binding_of_caller' 
end 

aide Spec:

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'factory_girl_rails' 

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

RSpec.configure do |config| 

config.include FactoryGirl::Syntax::Methods 
config.fixture_path = "#{::Rails.root}/spec/fixtures" 

config.use_transactional_fixtures = true 

config.infer_base_class_for_anonymous_controllers = false 

config.order = "random" 
end 

Spec Je suis en train de courir:

require 'spec_helper' 
describe "HomePage" do 
    describe "Root page" do 
    before { visit root_path } 
    it "works!" do 
     page.status_code.should be(200) 
    end 
    it 'contains bottom nav buttons' do 
     page.should have_link 'How it works' 
     page.should have_link 'Customer Service' 
     page.should have_link 'Terms of Service' 
     page.should have_link 'Contact Us' 
    end 
    end 
end 

Répondre

0

je fixe ce problème en commentant cette ligne dans mon spec_helper.rb:

require 'rspec/autorun' 

Encore une fois, le problème était seulement avec Guard et je suppose que l'autorun saute d'une manière ou d'une autre sur le bloc de configuration dans spec_helper, donc tout fonctionne bien maintenant. J'espère que cela aide quelqu'un d'autre ayant le même problème.

1

Essayez d'ajouter url_helpers-spec_helper.rb

RSpec.configure do |config| 
    ... 
    config.include Rails.application.routes.url_helpers 
end 

et vérifier mon autre answer à propos visit méthode manquante

+0

Merci, mais j'ai mentionné dans ma question que ça fonctionne bien en dehors de Guard. J'ai essayé ceci aussi bien que config.include Capybara :: DSL, mais aucun n'a aidé le travail de garde. – Joeman29

0

essayer d'ajouter

config.include Capybara::DSL 

à votre spec_helper.rb

+2

Bienvenue dans Stack Overflow! Cette réponse est apparue dans la file d'attente de révision de basse qualité, sans doute parce que vous n'avez pas expliqué ce que cela fait. Si vous l'expliquez (dans votre réponse), vous êtes beaucoup plus susceptible d'obtenir plus de votes upvotes, et le questionneur apprend réellement quelque chose! –

+0

Bien sûr. Le problème ressemble à 'Capybara' ne se connecte pas aux tests Rspec. Lorsque nous ajoutons 'config.include Capybara :: DSL' pour bloquer' RSpec.configure do | config | ... fin's sa jointure Capybara DLS à vos tests. Parfois, nous avons oublié les premiers pas. – goodniceweb