Как я могу написать минимальный код интеграции для приложения Rails с базовой аутентификацией? - PullRequest
0 голосов
/ 14 октября 2018

В этом отношении руководства по Rails и документация по Rails не работали.Я написал что-то вроде этого и запустил

class PlacesTest < ActionDispatch::IntegrationTest
  def test_places
    get root_url
    assert_response 200
  end
end

Но у меня есть эта строка в файле application_controller.rb:

http_basic_authenticate_with name: "dhh", password: "secret"

https://guides.rubyonrails.org/testing.html#what-to-include-in-your-functional-tests

Эта ссылка любезно

Если вы выполнили действия, описанные в разделе «Базовая аутентификация», вам нужно добавить в блок настройки следующее, чтобы пройти все тесты:

request.headers['Authorization'] = 
ActionController::HttpAuthentication::Basic.
  encode_credentials('dhh', 'secret')

Но это не сработало.Следующая ссылка также предлагает то же самое:

https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html

Но все равно тест не прошел.

E

Error:
PlacesTest#test_places:
NoMethodError: undefined method `headers' for nil:NilClass
    test/integration/places_test.rb:6:in `setup'

Не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 15 октября 2018

Доступ к request в тестах контроллера больше не поддерживается в Rails 5, поскольку классы тестирования контроллера наследуются от ActionDispatch::IntegrationTest, в то время как они наследуются от ActionController::TestCase в Rails 4.

Чтобы задать запросзаголовок в тестах контроллера, вам нужно сделать это:

get root_url, headers: { 'Authorization': ActionController::HttpAuthentication::Basic.encode_credentials('dhh', 'secret') }

Редактировать: Руководства устарели, см. также https://stackoverflow.com/a/52803443/7313509

...