web-dev-qa-db-fra.com

Capybara: méthode non définie 'visite'

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
36
bwbrowning

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

48
Eric C

Quelques points à noter ici: 

  1. Les changements dans Capybara 2.0.x sont documentés ici https://github.com/rspec/rspec-Rails/blob/master/Capybara.md . Il y a des changements dans la structure du répertoire spec: spec/features, spec/controllers, spec/views, spec/helpers, spec/mailers. 
  2. charge explicitement Capybara dsl dans votre spec_helper 


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

18
Saurabh Bhatia

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.

7
Ananth

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: 

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

6
jwall

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'.

edit: Si je mets inclure Capybara :: DSL dans mon bloc de description, cela fonctionne.

mais inclure Capybara :: DSL dans le champ d'application global n'est pas recommandé!

Parce que je ne connais pas le bon chemin.

3
Leon Xu

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 .

0
Matt Scilipoti
0
cbron