Ошибка капибары в HTTP.get: HTTP :: ConnectionError Исключение: не удалось подключиться: соединение отклонено - connect (2) для порта «localhost» 3000 - PullRequest
0 голосов
/ 30 января 2019

Мое приложение настроено на использование Capybara и minitest с драйвером RackTest.Это основная конфигурация в test_helper.rb:

require 'capybara/rails'
require 'capybara/minitest'

class ActionDispatch::IntegrationTest
  include Capybara::DSL
  include Capybara::Minitest::Assertions

  fixtures :all

  ...

  Capybara.app_host = "http://localhost:3000"
  Capybara.run_server = true
  Capybara.server_port = 3000
  Capybara.register_driver :rack_test do |app|
    Capybara::RackTest::Driver.new app,
      follow_redirects:false
  end

  ...
end

Теперь, когда я выполняю запрос непосредственно на моих тестах, они работают нормально.Например:

post '/api/v4/login', params: {"email": u.email, "password": u.password }

Но в одном тесте я вызываю класс (inside / app), который выполняет следующий метод:

HTTP.get(url,params).body

, для которого у меня нет серверазапустить и получить следующее сообщение об ошибке в ответ:

HTTP::ConnectionError Exception: failed to connect: Connection refused - connect(2) for "localhost" port 3000

1 Ответ

0 голосов
/ 30 января 2019

Во-первых, вы не должны использовать 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 и т. д.), либо смоделируйте / заглушите запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...