水豚:未定义的方法'访问'
当运行我的规格与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
这里需要注意一些事情:
- 水豚2.0.x的变化logging在这里https://github.com/rspec/rspec-rails/blob/master/Capybara.md 。 规范目录结构有一些变化:spec / features,spec / controllers,spec / views,spec / helpers,spec / mailer。
- 在您的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问题:
不幸的是,这个解决方法不适合我。 我仍然得到
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的最新更改。