2016-11-12 78 views
1

林繼軌道4在行動指南和Im高達第7章RSpec的測試失敗,但應用程序的工作

這是錯誤林錯過:

± bundle exec rspec 
.F........................ 

Failures: 

    1) Admin::UsersController GET #index returns http success 
    Failure/Error: get :index 
    NoMethodError: 
     undefined method `authenticate!' for nil:NilClass 
    # ./app/controllers/admin/application_controller.rb:10:in `authorize_admin!' 
    # ./spec/controllers/admin/users_controller_spec.rb:7:in `block (3 levels) in <top (required)>' 

Finished in 1.2 seconds (files took 1.86 seconds to load) 
26 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/admin/users_controller_spec.rb:6 # Admin::UsersController GET #index returns http success 

./app/controllers/admin/ application_controller.rb看起來是這樣的:

class Admin::ApplicationController < ApplicationController 
    before_action :authorize_admin! 

    def index 
    end 

    private 

    def authorize_admin! 
    authenticate_user! 

    unless current_user.admin? 
     redirect_to root_path, alert: "You must be an admin to do that." 
    end 
    end 
end 

./app/controllers/admin/users_controller.rb看起來是這樣的:

class Admin::UsersController < Admin::ApplicationController 
    def index 
    @users = User.order(:email) 
    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 

    if @user.save 
     flash[:notice] = "User has been created." 
     redirect_to admin_users_path 
    else 
     flash.now[:alert] = "User has not been created." 
     render "new" 
    end 
    end 

    private 
    def user_params 
     params.require(:user).permit(:email, :password) 
    end 
end 

./spec/controllers/admin/users_controller_spec.rb看起來是這樣的:

require 'rails_helper' 

RSpec.describe Admin::UsersController, type: :controller do 

    describe "GET #index" do 
    it "returns http success" do 
     get :index 
     expect(response).to have_http_status(:success) 
    end 
    end 

end 

正如你可能會說我是有點出我的深度,任何解決這一幫助將非常感激。

+0

我相信'authenticate_user!'是來自Devise的一部分的Warden? – user1385827

回答

0

你是否設置rspec來使用Devise?

嘗試添加下列到投機/ rails_helper.rb

# note: require 'devise' after require 'rspec/rails' 
require 'devise' 

RSpec.configure do |config| 
    #... 
    config.include Devise::Test::ControllerHelpers, :type => :controller 
    #... 
end 
0
使用RSpec的

,你可以把下面的一個名爲spec/support/devise.rb或文件中的spec/spec_helper.rb(或spec/rails_helper.rb如果您正在使用rspec-rails):

RSpec.configure do |config| 
    config.include Devise::Test::ControllerHelpers, type: :controller 
    config.include Devise::Test::ControllerHelpers, type: :view 
end 

只要確定這個包含是在require rspec/rails指令之後進行的。

+0

感謝您的幫助到目前爲止傢伙,我有以下spec/rails_helper.rb: 'config.include Warden :: Test :: Helpers,type :: feature' 'config.after(type::feature) {Warden.test_reset! }' – user1385827