我正在編寫一個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