Ответ 1
У вашего spec/spec_helper.rb
могут быть проблемы. Замените то, что у вас есть https://github.com/railstutorial/sample_app_rails_4/blob/master/spec/spec_helper.rb, и посмотрите, не устраняется ли проблема.
Я использовал Michael Hartl Rails Tutorial, чтобы забрать Ruby on Rails и недавно просматривал новую версию Rails 4.0 руководство. Я столкнулся с проблемой Spork; Я знаю, что мы используем пользовательскую вилку совместимости Spork for Rails 4.0 и что это может быть просто несовместимостью, но я хотел опубликовать свою проблему и посмотреть, что я делаю что-то неправильно или у кого-нибудь есть идеи. Всякий раз, когда я вызываю RSpec во время работы Spork, я получаю исключение ActiveRecord, а если я сам вызову RSpec, мои тесты успешно выполняются - примерный дамп терминала ниже:
[email protected]:~/ruby_projects/test_app$ rspec
Exception encountered: #<ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished>
backtrace:
/home/oren/.rvm/gems/[email protected]_4_0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:546:in `retrieve_connection'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activerecord-4.0.0/lib/active_record/connection_handling.rb:79:in `retrieve_connection'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activerecord-4.0.0/lib/active_record/connection_handling.rb:53:in `connection'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:792:in `current_version'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:800:in `needs_migration?'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:379:in `check_pending!'
/home/oren/ruby_projects/test_app/spec/spec_helper.rb:105:in `<top (required)>'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `block in load'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency'
/home/oren/.rvm/gems/[email protected]_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:11:in `block in run'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:21:in `block in initialize'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:18:in `fork'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:18:in `initialize'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:9:in `new'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:9:in `run'
/home/oren/.rvm/gems/[email protected]_4_0/gems/spork-1.0.0rc3/lib/spork/server.rb:48:in `run'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1588:in `perform_without_block'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1548:in `perform'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1626:in `block (2 levels) in main_loop'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1622:in `loop'
/home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1622:in `block in main_loop'
Я могу предоставить любые файлы из моего приложения по запросу, я просто не уверен, что будет самым полезным. Я в основном выполнил первые несколько шагов главы 3 учебника (настройка нового приложения, добавление контроллера StaticPages, настройка RSpec и добавление первой спецификации) и инструкции по настройке Guard и Spork (разделы 3.6.2 и 3.6.3).
Спасибо за вашу помощь!
У вашего spec/spec_helper.rb
могут быть проблемы. Замените то, что у вас есть https://github.com/railstutorial/sample_app_rails_4/blob/master/spec/spec_helper.rb, и посмотрите, не устраняется ли проблема.
У меня была такая же проблема, но я не могу понять, что вы подразумеваете, переместив "существующую среду" в блок Spork.prefork. Насколько я могу судить, листинг 3.37 должен быть полным spec/spec_helper.rb. Однако этот файл не работал у меня: я получил сообщение "connection not installed error".
Изменить: А, наконец, я понимаю, что вы имеете в виду. В версии файла spec/spec_helper.rb, который не будет работать для меня, в конце файла есть огромный блок комментариев, который заканчивается внизу моего текстового редактора, и после этих комментариев есть еще одна предпрограмма блокировать скрытие. Итак, что вам нужно сделать, это скопировать листинг 3.37, затем открыть spec/spec_helper.rb и "выбрать все", а затем вставить.
С другой стороны, файл spec/spec_helper.rb на github действительно работал у меня. Я запускал diff для двух файлов, а версия концентратора git отличается в конце блока предпродажа:
Листинг 3.37:
config.order = "random"
config.include Capybara::DSL
end
end
GitHub:
config.order = "random"
# Include the Capybara DSL so that specs in spec/requests still work.
config.include Capybara::DSL
# Disable the old-style object.should syntax.
config.expect_with :rspec do |c|
c.syntax = :expect
end
end
end
Я не понимаю, как добавленный код имеет какое-либо отношение к соединениям, но после многократного попытки листинга 3.37 и получения ошибки подключения я сменил файл на версию github, и я получил этот вывод:
$ time bundle exec rspec spec/requests/static_pages_spec.rb --drb
........
Finished in 0.19795 seconds
8 examples, 0 failures
Randomized with seed 27433
real 0m5.568s
user 0m3.617s
sys 0m0.832s
Затем я сменил spec/spec_helper.rb на версию в листинге 3.37, и снова получил ошибку подключения. Так листинг 3.37 просто не работает ( Изменить: Да, см. Первоначальное редактирование).
Изменить: Примечание. Если вы используете Листинг 3.37, вы не получите следующие ошибки:
Затем, сделав еще несколько шагов в учебнике, я заметил, что Guard выводил тестовые сбои:
Failures:
1) StaticPagesController GET 'home' returns http success
Failure/Error: response.should be_success
NoMethodError:
undefined method `should' for #<ActionController::TestResponse:0x000001046dba00>
# ./spec/controllers/static_pages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'
2) StaticPagesController GET 'help' returns http success
Failure/Error: response.should be_success
NoMethodError:
undefined method `should' for #<ActionController::TestResponse:0x00000104700058>
# ./spec/controllers/static_pages_controller_spec.rb:15:in `block (3 levels) in <top (required)>'
Finished in 0.24867 seconds
13 examples, 2 failures, 3 pending
Эти сбои происходят из автоматически сгенерированных тестовых файлов, которые используют метод, называемый should(), который отключен для версии github файла spec/spec_helper.rb:
# Disable the old-style object.should syntax.
config.expect_with :rspec do |c|
c.syntax = :expect
end
Ранее в учебнике мы запускали только тесты в одном файле:
spec/requests/static_pages_spec.rb
Но теперь Guard и Spork настроены для запуска всех тестов во всех тестовых файлах.
Чтобы избавиться от тестовых сбоев, я просто прокомментировал код в:
/spec/controllers/static_pages_controller_spec
Существует также несколько разных цветных изображений Guard, которые гласят:
Pending:
...
Учебник еще не говорил об этом, но в тесте вы можете просто написать "pending", например:
describe StaticPagesHelper do
pending "add some examples to (or delete) #{__FILE__}"
end
а затем, когда вы запускаете тесты, вывод будет напоминать вам, что вам все равно нужно написать тест, отобразив вывод "Ожидание". Если вы посмотрите на:
spec/helpers/static_pages_helper_spec.rb
где это ожидающее тестирование происходит.
Я получал такую же ошибку. Я думаю, что это происходит из-за того, что я одновременно работал охранником и spork. Если вы следуете руководству, он никогда не прикажет вам выйти из охраны перед настройкой spork. Если вы выполняете защиту выхода и просто запускаете spork, а затем эту команду, вы не получите ошибку. Следующий шаг в учебном пособии показывает, как одновременно запускать защиту и spork.
У меня была такая же проблема, и я исправил ее всего несколько минут назад, все было точным в моем файле spec/spec_helper.rb, или так я думал. Оказывается, мне пришлось удалить эту копию верхней части файла, которая была скрыта внизу.