【问题标题】:Rspec request specs and session valuesRspec 请求规范和会话值
【发布时间】:2013-04-18 01:02:44
【问题描述】:

我正在编写一些请求规范(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)>'  

我看到了以下问题Access session hash in request spec,但不确定这是否准确。

提前谢谢

【问题讨论】:

  • 测试代码是复制粘贴错误吗?您的测试块中没有 session 行。

标签: rspec rspec2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    有几个小错误

    1. 您应该描述 api_controller
    2. 请求的变量分配应该在 before(:each) 块内。
    3. 您缺少it
    4. 当文件未放在规范/控制器中时,您需要指定它是带有:type =&gt; :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
    

    【讨论】:

    • @GrantBirchmeier 似乎列出的点中有不幸的换行符。调整。谢谢。
    • 我有一个疑问:为什么你设置为:type =&gt; controller?不能是:type =&gt; request
    • @RodrigoChaves 我相信可能是这种情况,尽管我无法证实这一点。测试结构在过去几年中发生了变化。
    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2013-02-16
    相关资源
    最近更新 更多