내 레일에 RSpec에를 사용하여 5 응용 프로그램을 일부 컨트롤러 사양을 만들려고 해요,하지만 코드는 다음과 같은 오류를 던지고 유지는 :컨트롤러 테스트는 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
.:되는 것을 볼 수 있습니다, 세션 제어 장치의 코드는 다음과 같습니다 : 방식 PARAMS은
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
내가 오해하고 있는가이다 rspec에서 컨트롤러로 보냈습니까? 이 오류가 반환되는 다른 이유가 있습니까?
'puts @ user.email + ""+ @ user.password'를 확인하는 대신 컨트롤러 동작에서'params [: session]'을 확인해야합니다. 그것은 오류 메시지에 따라'nil '입니다. –
고마워, 나는 params를 일렬로 먼저 선언하고 post 문 앞에 puts params를 호출하여이를 시도했다. Parms는'{: session => {: email => "[email protected]", : password => "password"}}를 사용하고 있습니다. 모든 것이 나에게 할당 된 것처럼 보입니다. –
잘못 들었습니다. 나는 당신이'post : create, ... '를 호출 한 후 컨트롤러 액션에서 params를 확인해달라고 요청했다. –