[HTTP]как изменить «www.example.com » на «localhost: 3000»

#ruby-on-rails #http #cucumber

#ruby-on-rails #http #огурец

Вопрос:

привет, я создаю тестовое использование cucumber в своих приложениях rails. в моем пошаговом сценарии я использовал http basic authenticate, пока он проходит базовую аутентификацию, но когда я хочу вызвать метод на контроллере и опубликовать некоторые параметры, у меня возникла проблема :

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

 post some_admin_url, @params
  

во-вторых, я использовал этот код, и также произошел сбой, ошибка возникает при запуске перенаправления URI.parse на «www.example.com » Я хочу выбрать «localhost: 3000 / admin», чтобы я мог сопоставить данные :

 Net::HTTP.post_form(URI.parse(some_admin_url), {'from' => '2005-01-01','to' => '2005-03-31'}) { |i|  }
  

БУДУЩЕЕ :

Сценарий @selenium: Администратор хочет активировать пользователя,
учитывая, что один пользователь вошел в систему как администратор
и страница администратора

ШАГИ :

Дано /^ один пользователь вошел в систему как администратор $ / сделайте
create_user_admin
visit ‘/user_sessions/new’
заполнение пользовательской сессии[логин]’, :with=>’siadmin’,
заполнение пользовательской сессии [пароль]’, :with=> ‘12345’,
click_button ‘Anmelden’
end

Для данной /^ страницы администратора $/
требуется «net / http»,
требуется «uri»

 uri = URI.parse(user_action_admin_users_url)<br/>
http = Net::HTTP.new(uri.host, uri.port)<br/>
request = Net::HTTP::Get.new(uri.request_uri)<br/>
request.basic_auth("username", "password")<br/>
response = http.request(request)<br/>
  

завершение

 enter code here
  

ПОМОГИТЕ!!!

Спасибо

Ответ №1:

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

Используя Capybara, мы сделали это:

Capybara.default_host = "subdomain.yourapp.local"

Теперь мы фактически используем промежуточное программное обеспечение Rack (только в тестовой среде :), которое прозрачно изменяет env[HTTP_HOST] для приложения, поэтому нам не нужно заботиться о том, какой тестовый фреймворк / драйвер браузера мы используем.

Какой фреймворк вы используете?

Комментарии:

1. Я использовал «rails». Я попытался настроить Capybara.default_host = «поддомен. yourapp.local» ini тестовая среда, но все еще не работает?

2. Мы знаем, что вы используете Rails. Но среда ТЕСТИРОВАНИЯ важна. Вы говорите, что используете Cucumber. Можете ли вы опубликовать функцию и определения шагов, которые вы используете для ее запуска? Ниже cucumber вы можете использовать тестовые фреймворки differnet для выполнения реальных тестов. Это важно знать. В противном случае мы не сможем вам помочь.

3. о .. извините, селен, может быть, вы это имеете в виду, выше я указал будущее и шаг

4. Абах: ОК, селен. Но зачем вы делаете все эти Net:: HTTP вещи? Что вы пытаетесь сделать? Вы, вероятно, хотите вызвать определенный URL? Но почему бы вам не использовать selenium для этого ( посетите (your_url_here)) вместо Net:: HTTP. Вы выполняете аутентификацию дважды и теряете всю информацию о сеансе, полученную при входе в систему с помощью selenium. Пожалуйста, ознакомьтесь с основами Selenium / Cucumber и тем, как работает тестирование на уровне пользователя. Для решения вашей проблемы с перенаправлением, я думаю, вам нужно добавить еще одно промежуточное программное обеспечение rack, которое перезаписывает, сохраняя / восстанавливая env [HTTP_HOST] для каждого запроса.

Ответ №2:

 uname="myapp"
Capybara.default_host = "http://#{uname}.mywebsite.com:3000"
Capybara.server_port = 3000 # could be any of your choice
Capybara.app_host = "http://#{uname}.mywebsite.com:#{Capybara.server_port}" 
  

или

 request.host="www.myapp.com"
  

при расширении ActionController::TestCase

Ответ №3:

попробуйте изменить url на path

 post some_admin_path, @params
  

или

 post "http://localhost:3000/#{some_admin_url}", @params
  

Комментарии:

1. path используйте то же самое www.example.com , чтобы это не сработало. Кроме того, использовать http://localhost:3000 в качестве константы в вашем тесте — плохая идея. Вы никогда не знаете, вся ли ваша команда использует порт 3000, или они используют docker (и им нужен другой IP, чем localhost). Rails / test framework предоставляет способы изменить это. Давайте избежим этих взломов.