【问题标题】:Posting to the create method causes error in Sessions Controller test (RSpec)发布到 create 方法会导致 Sessions Controller 测试(RSpec)中的错误
【发布时间】:2015-04-04 17:07:01
【问题描述】:

我正在编写一个 Rails 4 应用程序来学习 Rails 和测试。我的程序代码按预期工作,但我无法弄清楚为什么在 Sessions 控制器测试(RSpec v. 3.1.0)中发布到 create 方法时出现无方法错误,这是错误的文本:

Failure/Error: post :create, email: "testerx@tester-x.net", 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: "testerx@tester-x.net", password: "passwordx", password_confirmation: "passwordx", workout_enthusiast: "true" ) }

it "redirects to user show page" do         
    post :create, email: "testerx@tester-x.net", 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

错误表明 nil:NilClass 的方法未定义。我确定用户是有效的。我无法弄清楚为什么发布到 create 方法在测试场景中不起作用。它在应用程序中按预期工作。我错过了什么?

【问题讨论】:

    标签: ruby-on-rails testing rspec


    【解决方案1】:

    post :create, email: "testerx@tester-x.net", password: "passwordx" 更改为post :create, session: { email: "testerx@tester-x.net", password: "passwordx" }

    post 的第二个参数是一个参数哈希,它将被发送到控制器。您现在将{ email: "testerx@tester-x.net", password: "passwordx" } 传递给post,显然参数哈希中没有session 键。当您的控制器尝试访问 paramas[:session][:xxx] 时,它会收到 NoMethodError,因为 params[:session] 为 nil,并且 nil 没有方法 []

    【讨论】:

    • 谢谢!!!设置会话密钥将我的会话控制器测试从“红色”更改为“绿色”。我也很欣赏您的出色解释;这有助于我学习。下次记得设置会话密钥!
    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多