机架rSpec控制器测试机架中间件问题

时间:2010-02-09 00:10:31

标签: ruby-on-rails rspec rack

我在使用rSpec的控制器API进行测试时遇到了大麻烦。现在我正在使用中间件身份验证解决方案(Warden),当我运行规范时,中间件添加的代理不存在,并且所有身份验证测试都抛出了NilPointerException这个地方。

似乎rSpec没有故意将中间件添加到最终应用程序中,我想知道是否有一种方法来修补rSpec以便实现这一目标。

我已经用黄瓜测试了整个事情,但是这是对旧认证版本的重构,并且有几个依赖于认证逻辑的Controller测试才能工作。

提前致谢。

2 个答案:

答案 0 :(得分:3)

似乎rails 2.x的rSpec Controller API并没有真正在控制器调用上使用Rack,所以这是不可能的。然而,David Chelimsky指出了一种(未经证实的)解决方案。我会把他给我的答案放在rSpec用户邮件列表上。

  

控制器规格不通过导轨2中的机架,所以不是真的。

     

有集成规范,它包含rails集成测试API   所以你可以在rails集成测试中做任何你可以做的事情。只是   将文件移到spec / integration,转换请求   “get:index”到“get'path / to / index'”,你应该是相当多的   很高兴。

     

让我们知道这是如何运作的。

     

干杯,   大卫

我最终在认证逻辑方法上模拟ApplicationController来做虚拟事情以使我的规范运行,我在大卫指出建议之前做了这个,所以我不知道是否有用。无论哪种方式,我希望它可以帮助任何其他开发人员处理相同的情况。

答案 1 :(得分:0)

关于相关问题的这篇文章可能会有所启发,并最终导致在rSpec配置中指定中间件组件的解决方案(我希望!)

https://rspec.lighthouseapp.com/projects/5645/tickets/963-request-is-nil#ticket-963-14

它对您的特定Rails2问题并没有什么帮助,但是这个查询在'rspec中间件'中名列前茅,所以希望能帮助其他遇到问题的人在尝试Rails3 beta及更高版本时。