7

我正在使用 rails 4 开发一个 rails API,我想对其进行测试。为此,我正在使用 Rspec 框架。

我的 API 有一个如下调用的身份验证方法:

class UsersController < ApplicationController
 # Token authentication
 before_action :set_user, except: [:index, :create]
 before_action :authenticate, except: [:index, :create]
 before_action :authenticate_admin, only: [:index, :create]

 ...
end

然后我有我的 UsersController Rspec:

describe UsersController do
 render_views
 describe "GET /users" do
  it "gets all users" do
   @request.env["AUTHORIZATION"] = "Token token=xxxxxxxxx"
   @request.env["HTTP_ACCEPT"] = "application/json"
   @request.env["CONTENT_TYPE"] = "application/json"
   get  :index
   response.status.should be(200)
  end
 end
end

当我执行测试时,它总是给我相同的:

 UsersController GET /users getting all users
 Failure/Error: response.status.should be(200)

   expected #<Fixnum:401> => 200
        got #<Fixnum:803> => 401
 ...

我使用 authenticate_or_request_with_http_token 方法从标头中获取令牌。

如果有人可以帮助我找到跳过 before_action 方法或正确设置 Authentication 标头的方法,我将不胜感激。

谢谢!

4

1 回答 1

10

我终于解决了这个问题。

错误是:

request.env["AUTHORIZATION"] 

一定是

request.env["HTTP_AUTHORIZATION"]. 

除此之外,我从一个不是在我的测试环境中创建的用户那里得到了一个错误的令牌。

:)

于 2013-08-08T07:41:05.200 回答