相关疑难解决方法(0)

为什么我的RSpec没有加载Devise :: Test :: ControllerHelpers?

我正在使用Rails 5和Devise 3.5.1.

阅读一本关于创建/测试API的好(旧)书,该书使用Devise身份验证.它是在Rails 5之前编写的,所以我选择不使用新的api-only版本.

这是我的测试......

#/spec/controllers/api/v1/users_controller_spec.rb    

require 'rails_helper'

describe Api::V1::UsersController, :type => :controller do
    before(:each) { request.headers['Accept'] = "application/vnd.marketplace.v1" }
    describe "GET #show" do
        before(:each) do
            @user = FactoryGirl.create :user
            get :show, params: {id: @user.id}, format: :json
        end
        it "returns the information about a reporter on a hash" do
            user_response = JSON.parse(response.body, symbolize_names: true)
            expect(user_response[:email]).to eql @user.email
        end
        it { should respond_with 200 }
    end
end
Run Code Online (Sandbox Code Playgroud)

这是一个完全出乎意料的RSpec错误

Devise::MissingWarden:
       Devise could not find the `Warden::Proxy` instance on your request environment. …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise rspec-rails warden

44
推荐指数
2
解决办法
1万
查看次数

配置Warden以用于RSpec控制器规范

我能够使用Devise的sign_in方法在我的控制器规范中登录用户.但是现在我正在从我的应用程序中删除Devise,我不太确定如何使用Warden自己的类似功能.

我应该如何设置spec/spec_helper.rb和相关spec/support/*.rb文件以使Warden在控制器规格内充分运行?

我已尝试spec/support/warden.rb使用以下内容设置文件:

RSpec.configure do |config|
  config.include Warden::Test::Helpers

  config.after do
    Warden.test_reset!
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我有before类似的调用来验证user工厂:

before { login_as FactoryGirl.create(:user) }
Run Code Online (Sandbox Code Playgroud)

但这是我一直看到的错误:

NameError:
  undefined method `user' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

此错误追溯到authenticate_user!控制器中的方法:

def authenticate_user!
  redirect_to login_path, notice: "You need to sign in or sign up before continuing." if env['warden'].user.nil?
end
Run Code Online (Sandbox Code Playgroud)

我很感激任何人都可以提供的任何指导.

rspec ruby-on-rails warden ruby-on-rails-3

20
推荐指数
2
解决办法
1万
查看次数