首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails/Rspec使测试通过http基本身份验证

Rails/Rspec使测试通过http基本身份验证
EN

Stack Overflow用户
提问于 2010-09-22 19:25:41
回答 3查看 32.5K关注 0票数 71

这里是应用程序控制器文件(application_controller.rb)中的http基本身份验证。

代码语言:javascript
复制
before_filter :authenticate

protected

def authenticate
  authenticate_or_request_with_http_basic do |username, password|
    username == "username" && password == "password"  
  end
end

和我的家庭控制器的索引操作的默认测试(spec/ controller / home _controller_spec.rb)

代码语言:javascript
复制
require 'spec_helper'

describe HomeController do

describe "GET 'index'" do
  it "should be successful" do
    get 'index'
    response.should be_success
  end
end

由于身份验证方法的原因,测试无法运行。我可以注释"before_filter :authenticate“来运行它们,但我想知道是否有方法可以让它们与该方法一起工作。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2010-09-22 19:36:15

很抱歉,我没有找到足够的解决方案,解决方案似乎如下:

代码语言:javascript
复制
describe "GET 'index'" do
  it "should be successful" do
    @request.env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("username:password")
    get 'index'
    response.should be_success
  end
end
票数 18
EN

Stack Overflow用户

发布于 2016-12-23 03:56:24

一些答案建议设置request.env,这是不安全的,因为请求可以是nil,您将以private method env' called for nil:NilClass结束,特别是在使用rspec -e运行单个测试时

正确的方法是:

代码语言:javascript
复制
def http_login
  user = 'user'
  password = 'passw'
  {
    HTTP_AUTHORIZATION: ActionController::HttpAuthentication::Basic.encode_credentials(user,password)
  }
end

get 'index', nil, http_login

post 'index', {data: 'post-data'}, http_login
票数 7
EN

Stack Overflow用户

发布于 2014-06-19 14:14:04

使用Rspec测试Grape时,可以使用以下语法

代码语言:javascript
复制
        post :create, {:entry => valid_attributes}, valid_session

valid_session在哪里

代码语言:javascript
复制
{'HTTP_AUTHORIZATION' => credentials}

代码语言:javascript
复制
credentials = ActionController::HttpAuthentication::Token.encode_credentials("test_access1")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3768718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档