HTTP Digest + Rspec
В моем приложении на Rails 3 есть довольно простая настройка HTTP Digest Authentication. В основном это следующие примеры, найденные в Руководстве по Rails Controller:
Мой ApplicationController имеет before_filter:
def digest_authenticate
success = authenticate_or_request_with_http_digest("Application") do |username|
APP_CONFIG["admin"]
end
end
Это все прекрасно работает. Страницы защищены, как и должно быть.
Я сейчас пытаюсь проверить это в RSpec и с треском провалился.
Я последовал такому принятому ответу и поставил authenticate_with_http_digest
метод в файле поддержки. Вот мой настоящий тест:
describe DashboardController do
describe "GET 'index'" do
it "returns http success" do
authenticate_with_http_digest(foo, bar, baz)
visit root_path
response.should be_success
response.code.should == '200'
end
end
end
Несколько проблем:
- Тесты проходят каждый раз, звоню я или нет
authenticate_with_http_digest
- Аргументы, которые я передаю
authenticate_with_http_digest
являются поддельными, и, кажется, не имеет значения. Разве это не должно соответствовать тому, что я хранил вAPP_CONFIG["admin"]
? - Если я распечатаю значение
success
от моегоdigest_authenticate
before_filter, он всегда печатает 401, даже если я передаю правильные параметры моему помощнику rspec.
Есть идеи, как эффективно протестировать HTTP Digest Authentication?
Спасибо!
1 ответ
Для тестирования контроллера вы должны использовать get :index
звоните, а не visit root_path
вызов. Это будет работать для любой допустимой комбинации HTTP-глаголов и действий Rails, которые вы тестируете контроллером.
visit
Метод является частью Capybara и должен использоваться только в спецификации запроса.