0

次のように私のレールコード:

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 コードによってセッション値の割り当てが正常に行われなかったことが原因です。

4

1 に答える 1

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
于 2013-10-16T07:14:28.837 に答える