1

我正在编写一些请求规范(rspec 2.13.1)并想直接访问会话哈希。我认为这在控制器规范中是可能的语法,但不确定这是否可以在请求规范中完成。

describe 'Api' do
  let(:user) { FactoryGirl.create(:user) }
  session[:auth_token]=user.auth_token

我收到以下错误:

 Failure/Error: session[:auth_token]=user.auth_token                              │lock (2 levels) in top_level'                                                         
 NoMethodError:                                                                   │/Users/jt/.rvm/gems/ruby-1.9.3-p392/gems/rake-10.0.4/lib/rake/application.rb:101:in `e
   undefined method `session' for nil:NilClass                                    │ach'                                                                                  
 # ./spec/requests/api_spec.rb:7:in `block (2 levels) in <top (required)>'  

在请求规范中看到了以下问题访问会话哈希,但不确定这是否准确。

提前谢谢

4

2 回答 2

3

:request使用规范类型时,会话数据访问被有意排除在规范之外。通常,这是因为不应直接对其进行测试。:controller如果要访问会话数据,则需要使用旧类型。

于 2019-03-06T21:31:41.313 回答
1

有几个小错误

  1. 您应该描述 api_controller
  2. 请求的变量分配应该在 before(:each) 块内。
  3. 你缺少一个it
  4. 当文件未放在规范/控制器中时,您需要指定它是一个控制器测试:type => :controller

这是一个例子:

require 'spec_helper'

describe ApiController, :type => :controller do
  let(:user) { FactoryGirl.create(:user) }

  before :each do
    session[:auth_token]=user.auth_token
  end

  it 'should do something' do
    get :index
    response.status.should_not eq 401
  end
end
于 2014-05-19T14:46:09.370 回答