Capybara:未定义的方法'访问'

bwb*_*ing 36 ruby-on-rails capybara ruby-on-rails-3

当使用rspec和capybara运行我的规格时,它无法找到capybara的访问方法.我需要做另一个初始化步骤吗?

$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)
Run Code Online (Sandbox Code Playgroud)

的Gemfile:

group :test, :development do
  gem "rspec-rails"
  gem "capybara"
end
Run Code Online (Sandbox Code Playgroud)

我的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'
Run Code Online (Sandbox Code Playgroud)

homepage_spec.rb:

require 'spec_helper'

describe "The home page" do

  context "home page exists" do
    visit "/"
    page.should have_content("elephants")
  end
end
Run Code Online (Sandbox Code Playgroud)

Eri*_*c C 49

我自己也遇到过这个问题.

所以造成这种情况的原因是Capybara有一些无证的变化.Capybara现在假设使用它的任何东西都需要在spec/features文件夹中,它将做出正确的假设.spec/requests文件夹中剩余的任何内容都将无法使用.虽然有解决方法.

对于上下文块,您可以添加参数:type => :feature,这将解决该问题,或者您可以describe在规范的开头更改方法的名称,feature这也应该更改它.

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

值得注意的是,我们更改了:Capybara假设您的规格在RSpec中运行的类型:功能(以前是:请求).最新版本的规格/功能.或者你可以使用Capybara Feature DSL(功能而不是描述),它可以在没有任何额外调整的情况下工作.如果您看到未定义方法访问等错误,那么您可能遇到此问题.如果您将模块包含在:request specs中,您可能需要将其更改为:feature.

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

  • 这应该是从椽子中大肆宣传 - 我只是浪费了一个早晨. (4认同)

Sau*_*tia 18

这里有几点需要注意:

  1. Capybara 2.0.x中的更改记录在此处https://github.com/rspec/rspec-rails/blob/master/Capybara.md.spec目录结构有变化:spec/features,spec/controllers,spec/views,spec/helpers,spec/mailers.
  2. 在spec_helper中明确加载Capybara dsl


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


Ana*_*nth 8

这对我有用.

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

RSpec.configure do |config|
  config.include Capybara::DSL, :type => :request
end
Run Code Online (Sandbox Code Playgroud)

这使您可以在规范/请求中使用Capybara的帮助程序.


jwa*_*all 6

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

这是一个丑陋的解决方案,但您可以将其添加到spec_helper.rb中.

module ::RSpec::Core
  class ExampleGroup
    include Capybara::DSL
    include Capybara::RSpecMatchers
  end
end 
Run Code Online (Sandbox Code Playgroud)

这个git问题:

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