Капибара: неопределенный метод 'визит' - PullRequest
36 голосов
/ 30 января 2012

Когда я запускаю мои спецификации с помощью 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)

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

Ответы [ 6 ]

49 голосов
/ 18 января 2013

Просто сам столкнулся с этим вопросом.

Так что причина этого в том, что в Капибаре произошли некоторые недокументированные изменения. Теперь Capybara делает предположение, что все, что использует его, должно быть в папке spec/features, и оно сделает правильные предположения. Все, что осталось в папке spec/requests, больше не будет работать. Хотя есть обходные пути.

Для контекстного блока вы можете добавить параметр :type => :feature, и это исправит эту проблему, или вы можете изменить имя метода describe в начале спецификации на feature, и это также должно изменить его .

Они объявили об этом изменении в своей группе Google: https://groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/5KfxezI-U0Q

В частности, мы изменили тип:, который, как предполагает Capybara, ваши спецификации выполняются в RSpec на: feature (ранее это был: request). Последний выпуск спецификаций / функций. В качестве альтернативы вы можете использовать Capybara Feature DSL (функция вместо описания), которая должна работать без каких-либо дополнительных настроек. Если вы видите такие ошибки, как посещение неопределенного метода, возможно, вы столкнулись с этой проблемой. Если вы включаете модули в спецификации: request, вам, вероятно, придется изменить это на: feature.

Это было дополнительно обсуждено в выпуске github: https://github.com/jnicklas/capybara/issues/814

18 голосов
/ 23 марта 2013

Несколько вещей, на которые стоит обратить внимание:

  1. Изменения в Capybara 2.0.x описаны здесь https://github.com/rspec/rspec-rails/blob/master/Capybara.md. Существуют изменения в структуре каталогов спецификаций: спецификации / функции, спецификации / контроллеры, спецификации / представления, спецификации / помощники, спецификации / почтовые программы.
  2. явно загружает Capybara dsl в ваш spec_helper

<code>
       require 'capybara/rails'
       require 'capybara/rspec'
       include Capybara::DSL
7 голосов
/ 25 июля 2014

Это сработало для меня.

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

RSpec.configure do |config|
  config.include Capybara::DSL, :type => :request
end

Это позволяет вам использовать помощников Капибары в спецификациях / запросах.

6 голосов
/ 19 апреля 2012

Поскольку RSpec.configure не включает DSL капибары в spec_helper.rb

Это уродливое решение, но вы можете добавить его в свой 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

3 голосов
/ 30 января 2013

К сожалению, этот обходной путь не делает это для меня. Я все еще получаю

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

Репо публично: https://github.com/ikusei/Goldencobra_Newsletter Вам нужно взглянуть на ветку '28817499-подписаться'

edit: Если я включу Capybara :: DSL внутри моего блока описаний, это будет работать.

, но включать Capybara :: DSL в глобальную область не рекомендуется!

Потому что я не знаю хорошего пути.

0 голосов
/ 18 ноября 2014

Для rspec 3 и рельсов убедитесь, что вы используете require "rails_helper" вместо require "spec_helper".

В противном случае просмотрите последние изменения rspec 3 & rspec-rails и Капибара 2.0.х .

...