为什么资金请求规格中没有水豚?

时间:2012-12-06 16:00:24

标签: ruby-on-rails rspec capybara

使用rspec和capybara处理新的Rails 3.2.9应用程序。

我在Gemfile中有以下内容:

gem 'rspec-rails'
gem 'capybara'

以及spec / spec_helper.rb中的以下内容:

require 'rspec/rails'
require 'capybara/rspec'

和spec / requests / asdf_spec.rb:

require 'spec_helper'
describe 'Asdf' do
  describe "GET /asdfs" do
    it "should list asdfs" do
      visit asdfs_path
    end
  end
end

此测试失败:

Failure/Error: visit asdfs_path
NoMethodError:
 undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x007fa7b68961a0>
# ./spec/requests/asdfs_spec.rb:19:in `block (4 levels) in <top (required)>'

所以看起来Capybara没有加载。伙计,为什么不呢?我觉得我之前已经完成了十几次同样的事情......可能会对一些愚蠢的东西进行消隐。

3 个答案:

答案 0 :(得分:13)

所以这是一个水豚版本2的变化。我发现了这个:

http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

解释说:

  

升级到Capybara 2.0后, capybara将无法使用   RSpec请求规范中的默认 。相反,一种新的规范 -   功能规范 - 已创建用于水豚。

     

要升级到capybara 2.0,您需要做一些事情:

     
      
  • 将rspec-rails升级到2.12.0或更高版本
  •   
  • 将使用capybara的任何测试从spec / requests移动到spec / features。水豚   测试使用visit方法,通常断言对页面。
  •   

答案 1 :(得分:3)

对于将Capybara升级到2.x时遇到同样问题的人,只需提供一些其他信息。查看Upgrading to Capybara 2部分下的rspec-rails文档。

基本上,为了使用Capybara DSL(页面和访问),您必须将现有规范移动到spec/features目录中。因此,您只能在验收测试中使用page & visit。没有更多的页面&amp;访问控制器并请求规格。控制器和请求规范中只允许使用机架测试DSL (get|post|put|delete|head/response.body)

建议,但有一种方法可以保持您的规格正常工作:

RSpec.configure do |c|
  c.include Capybara::DSL, :example_group => {
    :file_path => "spec/requests"
  }
end

文档指出,如果你走这条路,那么你就会超越预期的行为而你冒了风险。

绝对不要将此作为不升级到Capybara 2.x的理由。功能规格易于使用且易于阅读。 feature只是describe的别名,backgroundbefore的别名,scenario的{​​{1}}和it的别名given

希望这有助于任何人对新变化感到困惑。

答案 2 :(得分:-3)

问题出在水豚宝石本身。

gem 'capybara', '1.1.2'解决了这个问题(版本2.0.x失败)