【问题标题】:undefined method `session' for nil:NilClass in RSpec RailsRSpec Rails 中 nil:NilClass 的未定义方法“会话”
【发布时间】:2014-03-28 04:00:58
【问题描述】:

我在 Rails 中的规范有以下帮助程序:

include ApplicationHelper

def sign_in(user)
  session[:access_token] = user.access_token
end

def signed_in?
  current_user.present?
end

def current_user
  User.find_by(access_token: session[:access_token])
end

但我有“nil:NilClass 的未定义方法‘会话’”。我该如何解决?提前致谢。

【问题讨论】:

  • 这里没有session方法参考,所以问题肯定出在别处。您应该分享您的堆栈跟踪以及与之相关的任何代码。
  • 我只需要在我的规范中设置会话,因为我的控制器使用它。如何在 RSpec 中设置会话变量?
  • 您已经设置了session 变量,但这不是您的问题。您将session 发送到控制器中的某个位置nil(例如foo.session,其中foo 计算为nil)。
  • 那是什么帮手?你是怎么用的?

标签: ruby-on-rails rspec


【解决方案1】:

问题在于您从中调用这些方法的上下文。会话通常存在于控制器中。如果您要从一个类中调用这些方法之一,那么将有 Class 支持该方法调用。现在有一个 nil 类调用会话方法。您需要在会话的正确上下文中才能访问会话。

注意这里的不同上下文:

class PagesController < ApplicationController

  #NOTE: within the context of a class in this case class PagesController

  include ApplicationHelper

  def some_method
    sign_in(user)
  end
end

如果您将方法调用包装在这样的类上下文中:

class Utility
  include ApplicationHelper
  def self.sign_in_a_user(user)
    sign_in(user)
  end
end

那么这个错误就更有意义了:

undefined local variable or method `session' for Utility:Class

无论如何! nil:NilClass 是您所处的上下文。

查看类似问题:

Access session in Helper file ? Rails 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多