加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 某些rspec文件中提供的会话,而不是其他文件.怎

发布时间:2020-12-17 04:29:49 所属栏目:百科 来源:网络整理
导读:在尝试测试某些登录/注销功能时,我想从会话中删除一些信息.我发现我根本无法访问会话.我一直得到错误:nil的未定义方法`session’:NilClass. 但令我惊讶的是,我发现我可以从其他rspec页面访问会话.其他详细信息如下.我的问题是:为什么我可以从某些文件而不
在尝试测试某些登录/注销功能时,我想从会话中删除一些信息.我发现我根本无法访问会话.我一直得到错误:nil的未定义方法`session’:NilClass.

但令我惊讶的是,我发现我可以从其他rspec页面访问会话.其他详细信息如下.我的问题是:为什么我可以从某些文件而不是其他文件访问会话?我怎样才能在下面的第二个例子中访问会话?

细节
文件:spec / controllers / tenants_controller_spec.rb

require 'spec_helper'

describe TenantsController do
  specify { session[:tag].should == 'abc' }
end

文件:spec / requests / test.rb

require 'spec_helper'

describe 'Test' do
  specify { session[:tag].should == 'abc' }
end

当我通过rspec运行第一个文件时,我得到:

Failure/Error: specify { session[:tag].should == 'abc' }
  expected: "abc"
    got: nil (using ==)

这很好.这应该是失败的原因.

但是,当我运行第二个文件时,我得到:

Failure/Error: specify { session[:tag].should == 'abc' }
 NoMethodError:
   undefined method `session' for nil:NilClass

那么为什么会话是一个未定义的方法呢???

解决方法

您的第二个测试是“请求”规范,这是一个集成测试.它们旨在模拟浏览器和您获得的帮助程序,让您单击按钮并填写表单并在页面上声明文本和标签.检查会话对象是错误的抽象级别.

如果您想要验证身份验证,例如最好通过该应用程序.参见,例如这里:Stubbing authentication in request spec

知道集成测试是“探索性”或“冒烟”测试,高级测试检查组件之间的接缝,而不是组件本身的内核.它们是编写和维护最昂贵的.使用控制器规范验证会话内容并将所有业务逻辑移动到最容易测试的模型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读