Rails 5: Использование Capybara с Phusion Passenger - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь запустить спецификации в приложении Rails 5.Тем не менее, я вижу следующее LoadError:

Сбой / Ошибка: поднять LoadError, 'Capybara не может загрузить puma для своего сервера, добавьте puma в ваш проект или укажите другойсервер через что-то вроде Capybara.server = :webrick. '

Я использую гем passenger для производственного сервера.Есть ли способ, с помощью которого я могу использовать пассажира и для тестов на Капибару?Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Если вы действительно хотите использовать пассажиров для запуска приложения во время тестирования, вам нужно будет запустить приложение отдельно с пассажиром, используя среду тестирования рельсов (таким образом, он использует тестовую базу данных и т. Д.), А затем установить

Capybara.run_server = false
Capybara.app_host = "http://<wherever the app is accessible>"

для ваших тестов.Это говорит Capybara не беспокоиться о запуске самого приложения и просто подключиться к уже запущенному приложению.Вам также нужно будет использовать что-то вроде database_cleaner для обработки сброса базы данных между тестами, и будьте очень осторожны, чтобы убедиться, что у вас нет оставшихся запросов, выполняющихся в конце каждого теста.

При запускетесты с puma или webrick ничего из этого не требуется (database_cleaner обычно требуется для rails <5.1, но не 5.1+), потому что веб-сервер работает в том же процессе (в разных потоках), что и тесты, которые позволяют Capybaraзнать, когда запросы еще обрабатываются, и Rails делится подключением к БД с тестами.В целом, у вас будет гораздо более плавный опыт, если вы будете использовать <code>puma или webrick для своих тестов.

0 голосов
/ 16 декабря 2018

Не думаю, что вы можете сделать это:

Документация Капибара :

This block takes a rack app and a port and returns a 
rack server listening on that port

Из пассажирского репо :

This is fundamentally incompatible with Phusion Passenger's model. 
Such a Rack handler implies a single application and a single process.
Phusion Passenger runs multiple processes which can even serve multiple 
applications.
...