Машинист + Cabybara + Test::Unit = чертежи отсутствуют
Я столкнулся с очень запутанной проблемой...
Все мои тесты проходят, когда я запускаю их в изоляции. Когда я запускаю их как rake test, после запуска интеграционных тестов Machinist говорит, что больше не может найти чертежи.
Чтобы тесты на капибару заработали, я должен вызвать магию...
Чтобы получить фиксации транзакций, я навязываю все действия одной транзакции, например:
#always use the same connection so updates inside of transactions are visible.
#allows the use of use_transactional_fixtures
ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
def current_connection_id
#always fetch the connection for the main thread
# was Thread.current.object_id
Thread.main.object_id
end
def clear_reloadable_connections!
#do nothing, when connections are reloaded, otherwise the only connection is severed on each request
end
end
После выдачи чего-то вроде visit new_user_session_path
Я должен сделать это load "#{Rails.root}/test/blueprints.rb"
чтобы снова использовать мои чертежи.
Любые идеи о том, как машинист может потерять свои чертежи после простого visit
?
1 ответ
Проблема здесь связана с драйвером RackTest для Capybara. После обработки запроса он звонит ActionDispatch::Reloader.cleanup
! Глядя на комментарий ActionDispatch::Reloader
включается только когда config.cache_classes
ложно
Таким образом, одним из решений было бы установить config.cache_classes
чтобы правда на environment/test.rb
- но это не лучшее решение.
Другое решение - использовать другой драйвер (я сам не пробовал), Capybara поставляется с другими драйверами.
Я сделал что-то похожее на Брэда - перезагружая чертежи моей спецификации, в которой используются посещения Капибары. В вашей спецификации вы можете добавить блок после:
describe "my test" do
after do
load_blueprint
end
end
Я поместил свой метод reload_blueprint в файл в каталоге spec/support, т.е. spec/support/load_blueprint.rb
Это все еще обходной путь, а не правильное решение.