使用 RSpec 测试 Rails REST API
Testing Rails REST API with RSpec
我正在 Rails 上构建 REST API,我正尝试使用 RSpec 对其进行测试。我正在使用相当样板的授权代码:
def authenticate_user_from_token
pp 'authenticate_user_from_token'
pp request.headers.inspect
user = authenticate_with_http_token do |token, options|
pp token
user_id = options[:user_id]
user = user_id && Eater.find_by_id(user_id)
if user && Devise.secure_compare(user.auth_token, token)
user
else
nil
end
end
@current_user = user
end
如果我使用 curl 发送请求,这将非常有效,但我不知道如何在 Rspec 中传递身份验证令牌。我的基本要求是:
get '/api/1/users/1'
我尝试使用 header 方法设置令牌:
header 'Authorization: Token token', @token
那是行不通的。正如我在一些示例中看到的那样,我还尝试将其传递给 get 方法:
get '/api/1/users/1', :authorization => @token
同样无效。正确的做法是什么?
HTTP 参数是 get
的第三个参数,因此您需要执行以下操作:
get '/api/1/users/1', nil, {'Authorization' => @token}
根据密钥的限制,您还可以逃脱:
get '/api/1/users/1', nil, authorization: @token
我正在 Rails 上构建 REST API,我正尝试使用 RSpec 对其进行测试。我正在使用相当样板的授权代码:
def authenticate_user_from_token
pp 'authenticate_user_from_token'
pp request.headers.inspect
user = authenticate_with_http_token do |token, options|
pp token
user_id = options[:user_id]
user = user_id && Eater.find_by_id(user_id)
if user && Devise.secure_compare(user.auth_token, token)
user
else
nil
end
end
@current_user = user
end
如果我使用 curl 发送请求,这将非常有效,但我不知道如何在 Rspec 中传递身份验证令牌。我的基本要求是:
get '/api/1/users/1'
我尝试使用 header 方法设置令牌:
header 'Authorization: Token token', @token
那是行不通的。正如我在一些示例中看到的那样,我还尝试将其传递给 get 方法:
get '/api/1/users/1', :authorization => @token
同样无效。正确的做法是什么?
HTTP 参数是 get
的第三个参数,因此您需要执行以下操作:
get '/api/1/users/1', nil, {'Authorization' => @token}
根据密钥的限制,您还可以逃脱:
get '/api/1/users/1', nil, authorization: @token