我試圖在我的Rails創建一些控制器的規格使用RSpec的5應用程序,但該代碼不斷拋出以下錯誤:在Rails的RPEC和factorygirl控制器測試5
1) SessionsController Log in and log out logs in with valid user
Failure/Error: user = User.find_by(email: params[:session][:email].downcase)
NoMethodError:
undefined method `[]' for nil:NilClass
我的天賦是非常簡單的。用戶實例變量使用factory-girl創建一個用戶,其電子郵件爲「[email protected]」,密碼爲「password」。當我呼籲這些變量放,我可以看到,他們都設置正確。:
require 'rails_helper'
RSpec.describe SessionsController, type: :controller do
before :each do
@user = create(:user)
end
describe "Log in and log out" do
before :each do
post :create, { session: { email: @user.email,
password: @user.password }}
end
it "logs in with valid user" do
puts @user.email + " " + @user.password
expect(is_logged_in?).to be_truthy
end
end
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])
log_in user
remember user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
end
我誤解PARAMS的方式是發送到rspec控制器?是否有任何其他原因返回此錯誤?
而不是檢查'puts @ user.email +「」+ @ user.password',你應該在控制器動作中檢查'params [:session]'。根據錯誤消息,這是'nil'。 –
謝謝,我通過先聲明params一行並在post語句之前調用puts params來試驗。 Parms正在把'{:session => {:email =>「[email protected]」,:password =>「password」}}'這隻會讓我更加困惑。似乎所有東西都分配給了我? –
你說錯了。我在調用'post:create,...之後要求你在控制器動作中檢查參數' –