Capybara: undefined метод 'visit'
При запуске моих спецификаций с 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
Ответы
Ответ 1
Просто столкнулся с этой проблемой.
Итак, причина этого в том, что в 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 (функция вместо описания), которая должна работать без дополнительной настройки. Если вы видите ошибки, такие как метод undefined, то вы, вероятно, сталкиваетесь с этой проблемой. Если вы включаете модули в: спецификации запросов, вам, вероятно, придется изменить это на: функцию.
Это было обсуждено в проблеме github: https://github.com/jnicklas/capybara/issues/814
Ответ 2
Несколько вещей, чтобы отметить здесь:
require 'capybara/rails'
require 'capybara/rspec'
include Capybara::DSL
Ответ 3
Это сработало для меня.
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'capybara/rails'
RSpec.configure do |config|
config.include Capybara::DSL, :type => :request
end
Это позволяет использовать помощников Capybara внутри spec/запросов.
Ответ 4
Поскольку RSpec.configure не включает capybara 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
Ответ 5
К сожалению, это обходное решение для меня не делает. Я все еще получаю
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x007fbfeb535298>
Репо открыто: https://github.com/ikusei/Goldencobra_Newsletter
Вам нужно посмотреть на ветку "28817499-subscribe"
edit: Если я включил Capybara:: DSL внутри моего блока описания, он работает.
, но в том числе Capybara:: DSL в глобальной области не рекомендуется!
Потому что я не знаю хороший способ.
Ответ 6
Это сообщение в блоге помогло мне исправить проблему: http://rubyflewtoo.blogspot.com/2012/12/rails-32-minitest-spec-and-capybara.html
Ответ 7
Для rspec 3 и рельсов убедитесь, что вы используете require "rails_helper"
вместо require "spec_helper"
.
В противном случае просмотрите последние изменения rspec 3 и rspec-rails и Capybara 2.0.x.