我正在开发一个使用Rails 4& S构建社交网络的课程。设计。
我一直试图让课程通过,这是我得到的错误:
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 :(得分:4)
我在documentation找到了答案:
如果您选择在routes.rb中进行身份验证,则您将无法进行身份验证 通过assert_routing测试你的路线(它结合了assert_recognizes 和assert_generates,所以你也失去了它们。这是一个限制 Rails:Rack首先运行并检查您的路由信息,但从那以后 功能/控制器测试在控制器级别运行,你不能 向Rack提供认证信息 request.env [&#39; warden&#39;]为零,Devise生成以下内容之一 错误:
NoMethodError: undefined method 'authenticate!' for nil:NilClass
NoMethodError: undefined method 'authenticate?' for nil:NilClass
解决方案是在控制器测试中测试经过身份验证的路由。至 执行此操作,将控制器测试的身份验证方法存根。