Во-первых, вы не должны использовать post
или get
в тестах, которые используют Capybara (функциональные / системные тесты).Их следует использовать только в тестовых запросах / сырых интеграционных тестах, в которых не используется Capybara или сервер, на котором она запускается (лениво, когда необходимость обнаруживается с помощью вызова visit
), и обычно используются для тестов API.
Во-вторых, вы не должны устанавливать порт (до 3000) или app_host (как правило), когда Capybara запускает AUT.Порт 3000, как правило, является портом, на котором запускается ваш сервер разработки (rails s
), поэтому запуск Capybara на том же порту в тестовом режиме может привести к конфликту.Если у вас нет особой необходимости устанавливать Capybara на определенный порт (переадресация брандмауэра и т. Д.), Просто дайте ему выбрать произвольный порт.
Capybara.run_server = true
Capybara.register_driver :rack_test do |app|
Capybara::RackTest::Driver.new app, follow_redirects:false
end
После этого Capybara запустит приложение.на 127.0.0.1:<random_port>
, если вы хотите именно на localhost
(из-за особых сетевых потребностей, IPv6 и т. д.), тогда вы можете установить Capybara.server_host = 'localhost'
.Также использование follow_redirects: false
сомнительно, поскольку ваши тесты, использующие Capybara, действительно должны проверять не коды состояния, а то, что видит пользователь.
Помимо всего этого, если вы запускаете тест запроса, который заканчиваетсядля вызова кода приложения, выполняющего HTTP :: get, вам нужно либо изменить этот тест на тестирование функции / системы (использует Capybara, запускает собственный сервер, использует visit
и т. д.), либо смоделируйте / заглушите запрос.