【发布时间】:2015-12-18 19:52:40
【问题描述】:
我正在学习为 ruby on rails 应用程序进行测试,但我似乎遇到了问题。我正在尝试登录用户,因为我无权访问这两个测试中的 session[:user_id]。所以我在 test_helper 中创建了一个方法,在我的 create_categories_test 中定义了这些方法,它们运行,但是当我为它们设置登录时,它返回此错误:
(byebug) post login_path session: [{username: user.username, password: password}]
*** NoMethodError Exception: undefined method `[]' for nil:NilClass
这是我在 test_helper.rb 中的辅助方法
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
def sign_in_as(user, password)
post login_path, session: {username: user.username, password: password}
end
end
注意:我在我的方法中放置了一个调试器并运行了返回 nil 的同一行代码(出于某种原因)
这是我的 create_categories_test.rb 的代码
def setup
@user = User.create(username: "John", email: "john@doe.com", password: "password", admin: true)
end
test "get new category form and create category" do
sign_in_as(@user, "password")
get new_category_path
assert_template 'categories/new'
assert_difference 'Category.count' do
post_via_redirect categories_path, category: {name: "sports"}
end
assert_template 'categories/index'
assert_match "sports", response.body
end
test "invalid category submission results in failure" do
sign_in_as(@user, "password")
get new_category_path
assert_template 'categories/new'
assert_no_difference 'Category.count', 1 do
post categories_path, category: {name: " "}
end
assert_template 'categories/new'
assert_select 'h2.panel-title'
assert_select 'div.panel-body'
end
我的登录控制器:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(username: params[:sessions][:username])
if user && user.authenticate(params[:sessions][:password])
session[:user_id] = user.id
flash[:success] = "You have successfully logged in"
redirect_to user_path(user)
else
flash.now[:danger] = "There was something wrong with your login details"
render 'new'
end
end
def destroy
session[:user_id] = nil
flash[:success] = "You have successfully logged out"
redirect_to root_path
end
end
【问题讨论】:
-
请出示您的登录控制器,这就是问题所在。
-
我已经添加了我的登录控制器
-
您可以添加您的
new视图吗?
标签: ruby-on-rails ruby