如何从请求转移到RSpec中的功能

时间:2013-12-17 09:29:26

标签: ruby-on-rails rspec rspec-rails

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

以下是三种情况:

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

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

    当我尝试使用undefined method 'events_path' for nil:NilClass方法时,它会引发错误get events_path

  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
    
  5. 我想我可以在互联网上找到一些调整,但我是一个新鲜的rspec用户,我觉得我做的事情非常错误。并且所有在线示例都与我的问题无关。

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

1 个答案:

答案 0 :(得分:1)

从Capybara 2.0开始,Capybara方法(例如visit)仅在功能规格中可用,而不是请求规格或控制器规格。

同样,get方法可用于功能规格,仅适用于控制器和请求规范。

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

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

  1. 没有Capybara,因为它不是功能规格。
  2. 没有路径助手方法,因为它是控制器规范。
  3. 没有get方法,因为它是一个功能规范。
  4. 没有路径助手方法,因为它是控制器规范。
  5. 您需要:

    • 将其设为请求规范并将RSpec配置为包括Capybara :: DSL for request specs
    • 保留其功能规范并停止使用get等不适用于功能规格的方法

    以下some interesting background介绍了与请求规范不同的功能规范