水豚:未定义的方法'访问'

当运行我的规格与RSpec&水豚,它不能find水豚的访问方法。 是否有另一个我需要做的初始化步骤?

$bundle exec rspec spec /home/brian/projects/expense_track/expense_track/spec/requests/homepage_spec.rb:6:in `block (2 levels) in <top (required)>': undefined method `visit' for #<Class:0xb6572b8> (NoMethodError) 

的Gemfile:

 group :test, :development do gem "rspec-rails" gem "capybara" end 

我的spec_helper.rb的顶部:

 # This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'capybara/rspec' require 'rspec/autorun' 

homepage_spec.rb:

 require 'spec_helper' describe "The home page" do context "home page exists" do visit "/" page.should have_content("elephants") end end 

刚刚碰到这个问题我自己。

所以这个原因是水豚有一些没有logging的变化。 水豚现在认为,使用它的任何东西都需要在spec/features文件夹中,它会做出正确的假设。 spec/requests文件夹中剩下的任何内容都将不再起作用。 虽然有解决方法。

对于一个上下文块,你可以添加参数:type => :feature ,这将解决这个问题,或者你可以改变一个describe方法的名称在一个spec的feature ,这也应该改变它。

他们在Google小组中宣布了这一更改: https : //groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/5KfxezI-U0Q

值得注意的是,我们更改了Capybara假定您的规格在RSpec下运行的:types:function(以前是:请求)。 规格/function的最新版本。 或者,您可以使用水豚特征DSL(function而不是描述),这应该没有任何额外的调整工作。 如果你看到像未定义方法访问的错误,那么你可能遇到了这个问题。 如果您将模块包含到请求规范中,则可能需要将其更改为:feature。

这在github问题中进一步讨论: https : //github.com/jnicklas/capybara/issues/814

这里需要注意一些事情:

  1. 水豚2.0.x的变化logging在这里https://github.com/rspec/rspec-rails/blob/master/Capybara.md 。 规范目录结构有一些变化:spec / features,spec / controllers,spec / views,spec / helpers,spec / mailer。
  2. 在您的spec_helper中明确加载Capybara dsl

 require 'capybara/rails' require 'capybara/rspec' include Capybara::DSL 

这对我有效。

 require 'rspec/rails' require 'rspec/autorun' require 'capybara/rspec' require 'capybara/rails' RSpec.configure do |config| config.include Capybara::DSL, :type => :request end 

这使您能够在规格/要求内使用Capybara的助手。

因为RSpec.configure在spec_helper.rb中不包括capybara DSL

这是一个丑陋的解决scheme,但是你可以把它添加到你的spec_helper.rb中。

 module ::RSpec::Core class ExampleGroup include Capybara::DSL include Capybara::RSpecMatchers end end 

这个git问题:

https://github.com/rspec/rspec-rails/issues/503

不幸的是,这个解决方法不适合我。 我仍然得到

 NoMethodError: undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x007fbfeb535298> 

回购是公共下: https : //github.com/ikusei/Goldencobra_Newsletter你需要看看分行'28817499 – 订阅'

编辑:如果我把包括Capybara :: DSL在我的描述块它的作品。

但不build议在全球范围内包括Capybara :: DSL。

因为我不知道一个好方法。

这个博客文章帮助我解决了这个问题: http : //rubyflewtoo.blogspot.com/2012/12/rails-32-minitest-spec-and-capybara.html

对于rspec 3和rails,确保使用require "rails_helper" ,而不是require "spec_helper"

否则,查看对rspec 3&rspec-rails和Capybara 2.0.x的最新更改。