我正在编写一个Rails 4应用程序来学习Rails &测试。我的程序代码按预期工作,但我无法弄清楚为什么在发布到Sessions控制器测试(RSpec v.3.1.0)中的create方法时发现无方法错误。以下是错误的文本:发布到创建方法会导致错误Sessions控制器测试(RSpec)
Failure/Error: post :create, email: "[email protected]", password: "passwordx"
NoMethodError:
undefined method `[]' for nil:NilClass
这是相关的代码从我的会话控制器规格:
describe "POST create" do
context "with correct credentials" do
let!(:user) { User.create(user_name: "Testerx", email: "[email protected]", password: "passwordx", password_confirmation: "passwordx", workout_enthusiast: "true") }
it "redirects to user show page" do
post :create, email: "[email protected]", password: "passwordx"
expect(response).to be_redirect
expect(response).to redirect_to(users_show_path)
end
这是我的会话控制器代码:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
# Logs the user in and redirects to the user's show page.
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out if logged_in?
redirect_to root_url
end
end
错误说,对无未定义的方法:NilClass。我确定用户是有效的。我无法弄清楚为什么发布到创建方法不在测试场景中工作。它在应用程序中按预期工作。我错过了什么?
谢谢!设置会话密钥将会话控制器测试从“红色”更改为“绿色”。我也非常感谢你的优秀解释。这有助于我学习。我会记得下次设置会话密钥! – codeinspired