5

在我的 RSpec 测试中,让 Warden 的哈希出现在请求哈希中时遇到问题。当我在开发模式下运行我的应用程序时,Warden 密钥就在那里,但在测试环境中,一切都是零。我在下面包含了我的基本 rspec 配置。如果有人对我出错的地方有任何想法,我真的很想知道,我几乎整天都在摆弄这个。

在开发模式下运行时找到Warden,但在测试模式下运行时env['warden']总是nil

这是我在开发模式下检查请求对象内的warden hash时得到的示例:

request['warden']
=> Warden::Proxy:70272688271480 @config={:default_scope=>:default, :scope_defaults=>{}, :default_strategies=>{:_all=>[:password, :basic]}, :intercept_401=>true, :failure_app=>GrapeApe::BadAuthentication}

这是我在测试期间检查请求对象内的warden hash时得到的结果:

request['warden']
=> nil

规范帮助文件

require 'rubygems'

ENV["RACK_ENV"] ||= 'test'

require 'rack/test'
require 'capybara/rspec'
require 'factory_girl'
require File.expand_path("../../config/environment", __FILE__)

FactoryGirl.find_definitions

RSpec.configure do |config|
  config.mock_with :rspec
  config.expect_with :rspec
  config.include Capybara::DSL
  config.include Rack::Test::Methods
  config.include Warden::Test::Helpers
  config.after :each do
    Warden.test_reset!
  end
end

Capybara.configure do |config|
  config.app = GrapeApe::App.new
  config.server_port = 9293
end

Example Spec wherewarden 应该抛出 403 响应,因为用户尚未通过身份验证。

it "should get a specfic sketch" do
  get "/api/v1/sketches/#{@sketch.id}"
  JSON.parse(last_response.body)['files'].should == ["foo"]
end

示例错误:

Failure/Error: JSON.parse(last_response.body)['files'].should == ["foo"]
JSON::ParserError:
756: unexpected token at 'undefined method `authenticated?' for nil:NilClass'

检查监狱长钥匙的相关葡萄助手方法

module GrapeApe
  module Helpers
    def warden
      env['warden']
    end

    def authenticated
      if warden.authenticated?
        return true
      elsif params[:access_token] and
        User.find_for_token_authentication("access_token" => params[:access_token])
        return true
      else
        error!('401 Unauthorized', 401)
      end
    end

    def current_user
        warden.user || User.find_for_token_authentication("access_token" => params[:access_token])
    end

    def authenticated_user
      authenticated
      error!('401 Unauthorized', 401) unless current_user
    end

  end
end
4

0 回答 0