如何在RSpec中从请求移动到功能



我已经安装了rspec-rails 3.0.0.beta1(在ruby2+rails4上),在我的请求规范中使用design-helper时遇到了一些问题。经过一些谷歌搜索,我发现我需要将所有规范从spec/requests移动到spec/features(请求目录是由rspec安装程序或scaffold生成器创建的[现在不确定],所以我有点困惑)。这让我的设计助手工作起来了,但问题更多。

以下是三种情况:

  1. 规范文件是spec/requests/events_spec.rb,没有任何type设置

    undefined method 'visit' for #<RSpec::ExampleGroups::Events::GETEvents:0x007ff2464d9848>
    
  2. 规范文件为spec/requests/events_spec.rb,具有type: :controller

    当我尝试使用get events_path方法时,它抛出一个错误undefined method 'events_path' for nil:NilClass

  3. 规范文件是spec/features/events_spec.rb,没有任何type设置

    undefined method `get' for #<RSpec::ExampleGroups::Events::GETEvents:0x007ffb2714a968>
    
  4. 规范文件为spec/features/events_spec.rb,具有type: :controller

    undefined method `events_path' for nil:NilClass
    

我想我可以在互联网上找到一些调整,但我是一个新的rsspec用户,我觉得我做错了什么。网上所有的例子都与我的问题无关。

代码在这里:https://gist.github.com/mbajur/8002303

从Capybara 2.0开始,Capybara方法(例如visit)默认情况下仅适用于功能规范,而不适用于请求规范或控制器规范。

类似地,get方法不适用于功能规范,仅适用于控制器和请求规范。

最后,路径辅助方法仅在请求或功能规范中可用。

鉴于此,您的失败可以解释如下:

  1. 没有水豚,因为它不是一个功能规范
  2. 没有路径助手方法,因为它是控制器规范
  3. 没有get方法,因为它是一个功能规范
  4. 没有路径助手方法,因为它是控制器规范

您需要:

  • 将其作为请求规范,并将RSpec配置为包含请求规范的Capybara::DSL
  • 将其保留为功能规范,并停止使用get等不用于功能规范的方法

这里有一些有趣的背景介绍,介绍不同于请求规范的功能规范

最新更新