如何在 RSpec 测试 JSON API 中传递身份验证令牌?
How to pass authentication token in RSpec test for JSON API?
我正在尝试将授权令牌添加到 RSpec get
JSON API 测试中 Rails。但是到目前为止,所有尝试都会导致错误。问题似乎是令牌没有在请求中正确传递。
expected the response to have a success status code (2xx) but it was 401
当前代码:
Project_spec.rb(测试)
before do
@project = create(:project, :key => "123")
get '/api/v1/projects/1', {:Authorization => "Token 123"}, format: :json
end
it "returns correct status" do
expect( response ).to have_http_status(:success)
end
ProjectsController.rb
before_filter :restrict_access, :except => :create
def show
@project = Project.find(params[:id])
render json: @project
end
def restrict_access
authenticate_or_request_with_http_token do |token, options|
Project.exists?(key: token)
end
end
根据网上找到的几个推荐方案,我试过了
get '/api/v1/projects/1', format: :json, token: "123"
get '/api/v1/projects/1', { 'HTTP-AUTHORIZATION' => 'Token "123"' }, format: :json
get '/api/v1/projects/1', {:Authorization => "Token 123"}, format: :json
但似乎没有成功通过授权令牌。
注意:#3 中的样式在从外部应用程序发布时有效,但在 RSpec 测试本身中无效。
有没有人有这方面的经验并可以分享一些方向?
像这样使用它:
get '/api/v1/projects/1', {}, { Authorization: "Token 123"}
get
是 http 方法,{}
一个空参数,{ :Authorization => "Token 123"}
headers
get(path, parameters = nil, headers_or_env = nil)
其他方式:
before do
# some code here
@request.env['Authorization'] = "Token 123"
get '/api/v1/projects/1', format: :json
end
我刚试过就成功了
get '/api/v1/projects/1', as: :json, headers: {:Authorization => "Token 123"}
我正在尝试将授权令牌添加到 RSpec get
JSON API 测试中 Rails。但是到目前为止,所有尝试都会导致错误。问题似乎是令牌没有在请求中正确传递。
expected the response to have a success status code (2xx) but it was 401
当前代码:
Project_spec.rb(测试)
before do
@project = create(:project, :key => "123")
get '/api/v1/projects/1', {:Authorization => "Token 123"}, format: :json
end
it "returns correct status" do
expect( response ).to have_http_status(:success)
end
ProjectsController.rb
before_filter :restrict_access, :except => :create
def show
@project = Project.find(params[:id])
render json: @project
end
def restrict_access
authenticate_or_request_with_http_token do |token, options|
Project.exists?(key: token)
end
end
根据网上找到的几个推荐方案,我试过了
get '/api/v1/projects/1', format: :json, token: "123"
get '/api/v1/projects/1', { 'HTTP-AUTHORIZATION' => 'Token "123"' }, format: :json
get '/api/v1/projects/1', {:Authorization => "Token 123"}, format: :json
但似乎没有成功通过授权令牌。
注意:#3 中的样式在从外部应用程序发布时有效,但在 RSpec 测试本身中无效。
有没有人有这方面的经验并可以分享一些方向?
像这样使用它:
get '/api/v1/projects/1', {}, { Authorization: "Token 123"}
get
是 http 方法,{}
一个空参数,{ :Authorization => "Token 123"}
headers
get(path, parameters = nil, headers_or_env = nil)
其他方式:
before do
# some code here
@request.env['Authorization'] = "Token 123"
get '/api/v1/projects/1', format: :json
end
我刚试过就成功了
get '/api/v1/projects/1', as: :json, headers: {:Authorization => "Token 123"}