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

Несколько проблем:

  1. Тесты проходят каждый раз, звоню я или нет authenticate_with_http_digest
  2. Аргументы, которые я передаю authenticate_with_http_digest являются поддельными, и, кажется, не имеет значения. Разве это не должно соответствовать тому, что я хранил в APP_CONFIG["admin"]?
  3. Если я распечатаю значение success от моего digest_authenticate before_filter, он всегда печатает 401, даже если я передаю правильные параметры моему помощнику rspec.

Есть идеи, как эффективно протестировать HTTP Digest Authentication?

Спасибо!

1 ответ

Решение

Для тестирования контроллера вы должны использовать get :index звоните, а не visit root_path вызов. Это будет работать для любой допустимой комбинации HTTP-глаголов и действий Rails, которые вы тестируете контроллером.

visit Метод является частью Capybara и должен использоваться только в спецификации запроса.

Другие вопросы по тегам