【问题标题】:How to assign session value to instance variable in Rspec controller?如何将会话值分配给 Rspec 控制器中的实例变量?
【发布时间】:2014-08-06 07:25:54
【问题描述】:

我的rails代码如下:

class MyController < ApplicationController
  def index
    @session_is_admin = session[:user_permission][:is_admin]
    begin
      @obj = Class.all
      respond_to do |format|
        format.html # index.html.erb
      end
    rescue
    end
  end
end

Rspec 代码:在 (rspec/controllers) 下

require 'spec_helper'

describe MyController do
  describe "GET index" do
    it "populates an array of data" do
       get :index
       session[:user_permission][:is_admin] = false
       assigns(:session_is_admin).should eq(false)
    end
  end
end

执行后,它提供了以下错误:

 1) MyController GET index populates an array of data
     Failure/Error: get :index
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # ./app/controllers/my_controller.rb:16:in `index'
     # ./spec/controllers/my_controller_spec.rb:20:in `block (3 levels) in <top (required)>'

Finished in 9.27 seconds
1 example, 1 failure

请帮我解决上述问题。这是由于我的 rspec 代码未成功完成会话值分配。

【问题讨论】:

  • 在分配false之前尝试添加session[:user_permission] = {}
  • 尝试使用 session_is_admin 代替 @session_is_admin

标签: ruby-on-rails ruby session rspec


【解决方案1】:

您可能需要在调用控制器操作之前设置会话值。此外,您的会话设置仅在 session[:user_permission] 已经是 Hash 时才有效。

请尝试以下方法:

it "populates an array of data" do
  session[:user_permission] = {:is_admin => false}
  get :index
  assigns(:session_is_admin).should eq(false)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多