2016-07-05 23 views
2

我正在使用Rails 4構建社交網絡課程4 & Devise。Rails 4 - 未定義的方法'認證'爲零:NilClass

我堅持試圖讓一門課程來傳遞,這是我得到的錯誤:

1) Error: 
UserFriendshipsControllerTest#test_: #new when not logged in should get redirected to the login page. : 
NoMethodError: undefined method `authenticate!' for nil:NilClass 
    test/controllers/user_friendships_controller_test.rb:8:in `block (3 levels) in <class:UserFriendshipsControllerTest>' 

這是我users_friendships_controller_test.rb:

require 'test_helper' 

class UserFriendshipsControllerTest < ActionController::TestCase 

context "#new" do 
    context "when not logged in" do 
     should "get redirected to the login page" do 
      get :new 
      assert_response :redirect 
     end 
    end 
    end 
end 

我user_friendship.rb :

class UserFriendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, class_name: "User", foreign_key: "friend_id" 

    private 

     def friendship_params 
      params.require(:user).permit(:user_id, :friend_id, :friend) 
     end 
end 

我已經添加到我的user_friendships_controller.rb的唯一事情是一個空白的新方法和:

before_filter :authenticate_user!, only: [:new] 

請讓我知道我是否應該發佈任何更多的代碼。

謝謝

+0

你能提供'user_friendships_controller'上市 –

+0

@farhatmihalko '類UserFriendshipsController mycellius

回答

4

我已經找到答案documentation

如果您選擇在routes.rb中進行身份驗證,你失去了通過assert_routing測試你的路由(它結合assert_recognizes 能力 和assert_generates,所以你也會失去它們)。這是 Rails的限制:機架首先運行並檢查您的路由信息​​,但由於 功能/控制器測試在控制器級別運行,因此您不能向機架提供認證信息,這意味着 request.env ['warden']爲零且設計生成以下 錯誤之一:

NoMethodError: undefined method 'authenticate!' for nil:NilClass 
NoMethodError: undefined method 'authenticate?' for nil:NilClass 

的解決方案是在測試控制器的測試驗證路由。至 做到這一點,爲您的控制器測試列出您的身份驗證方法。

How to stub authentication.

相關問題