ruby-on-rails - 如何在 JSON API 的 RSpec 测试中传递身份验证 token ?

标签 ruby-on-rails json rspec-rails

我正在尝试将授权 token 添加到 RSpec get Rails 中的 JSON API 测试。但是到目前为止尝试的所有方法都会导致错误。问题似乎是 token 未在请求中正确传递。

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

项目 Controller .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

  • 但似乎没有什么能成功通过授权 token 。

    注意:#3 中的样式在从外部应用程序发布时有效,但不适用于 RSpec 测试本身。

    有没有人有这方面的经验,可以分享一些方向?

    最佳答案

    像这样使用它:

     get '/api/v1/projects/1', {}, { Authorization:  "Token 123"}
    
    get是http方法,{}空参数,{ :Authorization => "Token 123"}标题

    get(path, parameters = nil, headers_or_env = nil)



    Documentation

    另一种方式:
    before do
        # some code here
        @request.env['Authorization'] = "Token 123"
        get '/api/v1/projects/1', format: :json
    end
    

    关于ruby-on-rails - 如何在 JSON API 的 RSpec 测试中传递身份验证 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37523956/

    相关文章:

    ruby-on-rails - Webrat (web_steps.rb) 未被使用

    ruby-on-rails - 如何测试 rails 模型的 after_initialize 回调?

    rspec - 创建新的 stub 方法,以检查该方法是否存在于Rspec中

    html - 如何使菜单可以越过 Logo ?

    ruby-on-rails - 我如何将 rspec 与已清理的 YAML 固定装置一起使用?

    javascript - var 查询未返回所需结果

    jquery - 使用 jquery 的 JSON 循环

    javascript - 将 JSON 响应映射到 Vue.js 中的模型类

    ruby-on-rails-3 - 如何 stub :errors collection to act invalid when rspec tests a controller that uses respond_with

    ruby-on-rails - 从命令行重新启动Rails应用程序时如何定义环境?