36 votes

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
 

50voto

Eric C Points 1232

Viens de tomber sur ce problème moi-même.

Donc, la raison pour cela est il y a eu un peu sans-papiers changement dans le Capybara. Capybara maintenant fait l'hypothèse que tout l'aide nécessaire à l' spec/features le dossier et il fera le bon hypothèses. Rien dans l' spec/requests le dossier ne fonctionne plus. Bien qu'il existe des solutions de contournement.

Pour un cadre de bloc, vous pouvez ajouter le paramètre :type => :feature et cela va corriger ce problème ou vous pouvez modifier le nom d'un describe méthode au début d'un spec feature et cela doit changer aussi.

Ils ont annoncé un changement dans leur groupe Google: https://groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/5KfxezI-U0Q

Notamment, nous avons modifié le :type de Capybara suppose que votre specs exécuter sous RSpec pour :fonctionnalité (il était auparavant :à la demande). La dernière version de spec/fonctionnalités. Alternativement, vous pouvez utiliser le Capybara Fonction DSL (fonctionnalité au lieu de décrire), qui devrait fonctionner sans peaufinage. Si vous voyez des erreurs de ce type de méthode non visite, alors vous êtes probablement rencontrer ce problème. Si vous êtes, y compris des modules dans :demande de cahier des charges, vous aurez probablement besoin de le changer pour :fonctionnalité.

Cela a été discuté plus loin dans le github question: https://github.com/jnicklas/capybara/issues/814

19voto

Saurabh Bhatia Points 158

Quelques points à noter ici:

  1. Les modifications apportées à Capybara 2.0.x sont documentées 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
 

8voto

Ananth Points 39

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.

5voto

jwall Points 365

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

2voto

Yifei Points 31

Malheureusement, cette solution de contournement ne pas le faire pour moi. Je reçois toujours

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

Les pensions de titres sont public en vertu de l': https://github.com/ikusei/Goldencobra_Newsletter Vous avez besoin de regarder la branche "28817499-s'abonner'

edit: Si je mets inclure Capybara::DSL à l'intérieur de mon décrire bloc, il fonctionne.

mais y compris Capybara::DSL dans la portée globale n'est pas recommandé!

Parce que je ne connais pas un bon moyen.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X