Напишите тест RSpec для подключения к другому приложению rails на порту 3000 - PullRequest
0 голосов
/ 25 июня 2018

В моем приложении rails у меня есть несколько заданий, использующих Stalker и Beanstalkd.Часть этих заданий заключается в вызове API веб-интерфейса приложения.Я хочу написать сквозной тест rspec для этого задания, в котором тестируемое задание выполняет фактический вызов API для приложения rails.

Проблема в том, что я всегда получаю отказ в подключении к соединению по умолчаниювеб-порт, 3000:

Errno::ECONNREFUSED: Failed to open TCP connection to localhost:3000 (Connection refused - connect(2) for "localhost" port 3000)
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:136:in `start_with_connect_without_finish'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:104:in `request'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/net_http_ext.rb:51:in `request'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:210:in `block in transmit'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:123:in `start_without_connect'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:150:in `start'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:206:in `transmit'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:68:in `execute'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:35:in `execute'
/Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/resource.rb:76:in `put'

Я использую rspec для запуска своих тестов - до сих пор я пытался объявить мой тест типа :feature или :request - действительно ли они запускают реальныйсервер приложений и порт 3000?Есть ли способ сделать это в моем тесте?Я использую неправильный порт?

1 Ответ

0 голосов
/ 26 июня 2018

Вы не поделились многими деталями, поэтому я постараюсь ответить на высоком уровне.может быть, это полезно.

:request Тип спецификации не запустит сервер для вас (он предназначен для тестирования полного стека, включая маршрутизацию, но не включая фактический HTTP-запрос)

:feature require's capybara, и вы делаете запросы, например, используя visit метод.Capybara запустит сервер и выполнит HTTP-запрос через безголовый Chrome или другой клиент.Но ваш Job, вероятно, не знает, что он должен использовать другой сервер

Если вы использовали капибару, вы можете получить текущий порт, это объясняется в этом вопросе Cucumber/ Capybara - как получить хост и порт текущего исполнения (не забывайте упомянуть это, если полезно) И найдите способ передать эту информацию в работу, которую вы пытаетесь протестировать.

В общем случае сквозные тесты сложны, когда у вас есть асинхронный компонент.Как долго вы должны ждать, пока проявится фоновое задание, и когда его объявлять failed?

Кроме того, странно, что ваша работа сталкивается с HTTP-сервером ... к нему должен быть более легкий доступк самим объектам приложения, нет?

Если это не другой сервер приложений.Затем вам просто нужно убедиться, что он работает (как зависимость), точно так же, как вы убедитесь, что сервер БД работает, прежде чем запускать спецификации.

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