Lors de l'exécution de mes spécifications avec rspec & capybara, la méthode de visite de capybara est introuvable. Y a-t-il une autre étape d'initialisation que je dois faire?
$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
haut de mon 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
J'ai juste rencontré ce problème moi-même.
La raison en est qu'il y a eu un changement quelque peu non documenté à Capybara. Capybara fait maintenant l'hypothèse que tout ce qui l'utilise doit être dans le dossier spec/features
et il fera les hypothèses appropriées. Tout ce qui reste dans le dossier spec/requests
ne fonctionnera plus. Bien qu'il existe des solutions de contournement.
Pour un bloc de contexte, vous pouvez ajouter le paramètre :type => :feature
. Cela résoudra le problème ou vous pourrez modifier le nom d'une méthode describe
au début d'une spécification en feature
. Cela devrait également le modifier.
Ils ont annoncé ce changement dans leur groupe Google: https://groups.google.com/forum/?fromgroups=#!topic/Ruby-capybara/5KfxezI-U0Q
Nous avons notamment changé le type: que Capybara suppose que vos spécifications sont exécutées sous RSpec en: feature (il s’agissait auparavant de: request). La dernière version de spec/features. Sinon, vous pouvez utiliser Capybara Feature DSL (fonctionnalité au lieu de décrire), qui devrait fonctionner sans ajustement supplémentaire. Si vous constatez des erreurs telles qu'une visite de méthode non définie, vous rencontrez probablement ce problème. Si vous incluez des modules dans: specs de demande, vous devrez probablement changer cela en: feature.
Cela a été discuté plus en détail dans le numéro de github: https://github.com/jnicklas/capybara/issues/814
Quelques points à noter ici:
require 'capybara/Rails'
require 'capybara/rspec'
include Capybara::DSL
Cela a fonctionné pour moi.
require 'rspec/Rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'capybara/Rails'
RSpec.configure do |config|
config.include Capybara::DSL, :type => :request
end
Cela vous permet d'utiliser les aides de Capybara dans les spécifications/demandes.
Parce que RSpec.configure n'inclut pas capybara DSL dans spec_helper.rb
C'est une solution laide, mais vous pouvez l'ajouter à votre spec_helper.rb.
module ::RSpec::Core
class ExampleGroup
include Capybara::DSL
include Capybara::RSpecMatchers
end
end
La question git pour ceci:
Malheureusement, cette solution ne le fait pas pour moi. Je reçois encore
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x007fbfeb535298>
Le référentiel est public sous: https://github.com/ikusei/Goldencobra_Newsletter Vous devez consulter la succursale '28817499-subscribe'.
Pour rspec 3 et Rails, assurez-vous d’utiliser require "Rails_helper"
au lieu de require "spec_helper"
.
Sinon, passez en revue les dernières modifications apportées à rspec 3 & rspec-Rails et Capybara 2.0.x .
Ce blog m'a aidé à résoudre le problème: http://rubyflewtoo.blogspot.com/2012/12/Rails-32-minitest-spec-and-capybara.html