HTTP摘要+ Rspec

时间:2012-12-19 06:06:19

标签: ruby ruby-on-rails-3 authentication rspec http-digest

我的Rails 3应用程序上有一个非常基本的HTTP摘要身份验证设置。它主要遵循Rails Controller Guide中的示例:

我的ApplicationController有一个before_filter:

def digest_authenticate
  success = authenticate_or_request_with_http_digest("Application") do |username|
    APP_CONFIG["admin"]
  end
end

这一切都很棒。页面应该受到保护。

我现在正试图在RSpec中对此进行测试并且悲惨地失败。

我按了this SO accepted answer并将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 before_filter打印出digest_authenticate的值,它总是打印出401,即使我将正确的参数传递给我的rspec助手。
  4. 有关如何有效测试HTTP摘要式身份验证的任何想法?

    谢谢!

1 个答案:

答案 0 :(得分:2)

对于控制器测试,您应该使用get :index来电而不是visit root_path来电。这适用于您作为控制器测试的HTTP谓词和Rails操作的任何有效组合。

visit方法是Capybara的一部分,只能在请求规范中使用。