2014-04-30 2 views
0

Я запускаю Rails 4, пытаясь установить некоторый интеграционный тест с Rspec и Capybara. Я хочу настроить охрану для запуска теста zeus. когда я вношу изменения. Проблема заключается в том, когда что-нибудь Сформируйте Капибара DSL называется, или всякий раз, когда я пытаюсь использовать маршрутные хелперы, мне дают ошибки, как это:Охранник не загружает Capybara DSL

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

Если я заменяю root_path с «/» это получить:

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

Если я только что запустил rspec spec. или «испытание zeus». он отлично работает.

Я попытался удалить тест «cmd: 'zeus». вариант из моего Guardfile, но у меня такие же проблемы. Кажется очевидным, что проблема связана с Guard и не связана с zeus.

В моей 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 

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 Я пытаюсь запустить:

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 

ответ

0

Я исправил эту проблему, комментируя эту линию в моем spec_helper.rb:

require 'rspec/autorun' 

Опять же, проблема был только с Guard, и я полагаю, что автозапуск каким-то образом пропускает блок конфигурации в spec_helper, поэтому теперь все работает отлично. Надеюсь, это поможет кому-то еще иметь ту же проблему.

1

Попробуйте добавить url_helpers к spec_helper.rb

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

и проверить мои другие answer о visit методах отсутствуют

+0

Спасибо, но я упомянул в своем вопросе, что он отлично работает за пределами Guard. Я попробовал это, а также config.include Capybara :: DSL, но никто не помог работе Guard. – Joeman29

0

попробовать добавить

config.include Capybara::DSL 

к вашему spec_helper.rb

+2

Добро пожаловать в переполнение стека! Этот ответ появился в очереди низкого качества, по-видимому, потому, что вы не объяснили, что это делает. Если вы объясните это (в своем ответе), у вас гораздо больше шансов получить больше бонусов - и вопросник действительно что-то узнает! –

+0

Несомненно. Проблема выглядит так: «Capybara» просто не соединяется с тестами Rspec. Когда мы добавляем 'config.include Capybara :: DSL' для блокировки' RSpec.configure do | config | ... конец его присоединения Capybara DLS к вашим испытаниям. Иногда мы забыли первые шаги. – goodniceweb

Смежные вопросы