我已经安装了rspec-rails 3.0.0.beta1
(在ruby2+rails4上),在我的请求规范中使用design-helper时遇到了一些问题。经过一些谷歌搜索,我发现我需要将所有规范从spec/requests
移动到spec/features
(请求目录是由rspec安装程序或scaffold生成器创建的[现在不确定],所以我有点困惑)。这让我的设计助手工作起来了,但问题更多。
以下是三种情况:
-
规范文件是
spec/requests/events_spec.rb
,没有任何type
设置undefined method 'visit' for #<RSpec::ExampleGroups::Events::GETEvents:0x007ff2464d9848>
-
规范文件为
spec/requests/events_spec.rb
,具有type: :controller
当我尝试使用
get events_path
方法时,它抛出一个错误undefined method 'events_path' for nil:NilClass
-
规范文件是
spec/features/events_spec.rb
,没有任何type
设置undefined method `get' for #<RSpec::ExampleGroups::Events::GETEvents:0x007ffb2714a968>
-
规范文件为
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
方法不适用于功能规范,仅适用于控制器和请求规范。
最后,路径辅助方法仅在请求或功能规范中可用。
鉴于此,您的失败可以解释如下:
- 没有水豚,因为它不是一个功能规范
- 没有路径助手方法,因为它是控制器规范
- 没有get方法,因为它是一个功能规范
- 没有路径助手方法,因为它是控制器规范
您需要:
- 将其作为请求规范,并将RSpec配置为包含请求规范的Capybara::DSL
- 将其保留为功能规范,并停止使用
get
等不用于功能规范的方法
这里有一些有趣的背景介绍,介绍不同于请求规范的功能规范