Je n'arrive pas à faire fonctionner capybara avec rspec. Cela me donne cette erreur:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
Je sais qu'il y a beaucoup d'articles à ce sujet, mais aucune des solutions ne fonctionne pour moi. La plupart d'entre eux impliquent que les spécifications ne soient pas dans / spec / features - dans laquelle se trouve la mienne.
D'abord l'erreur:
$bundle exec rspec spec
F
Failures:
1) security signs users in
Failure/Error: visit "/sessions/new"
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
# ./spec/features/security_spec.rb:4:in `(root)'
Finished in 0.006 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/features/security_spec.rb:3 # security signs users in
Je pense qu'il est important de noter qu'au début, j'utilisais l'URL Helper 'new_sessions_path' et cela continuait à me donner une erreur undefined local variable or method 'new_sessions_path'
. Je sais que c'est valable parce que:
$ rake routes
logout_sessions GET /sessions/logout(.:format) sessions#logout
sessions POST /sessions(.:format) sessions#create
new_sessions GET /sessions/new(.:format) sessions#new
contracts POST /contracts(.:format) contracts#create
new_contracts GET /contracts/new(.:format) contracts#new
edit_contracts GET /contracts/edit(.:format) contracts#edit
GET /contracts(.:format) contracts#show
PUT /contracts(.:format) contracts#update
DELETE /contracts(.:format) contracts#destroy
root / contracts#index
Mon Gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.11'
gem 'execjs'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.1'
gem 'jruby-openssl'
gem 'therubyrhino'
gem 'kaminari'
gem 'nokogiri'
group :development do
gem 'warbler'
end
group :test do
gem 'rspec-rails'
gem 'capybara'
gem 'activerecord-jdbcsqlite3-adapter'
end
spec_helper.rb à l'intérieur de my_app / spec:
# 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 'rspec/autorun'
# Capybara integration
require 'capybara/rspec'
require 'capybara/rails'
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
# Include path helpers
config.include Rails.application.routes.url_helpers
end
my_app / spec / features / security_spec.rb:
describe "security", :type => :feature do
it "signs users in" do
visit "/sessions/new"
fill_in "username", :with => "user"
fill_in "password", :with => "pass"
click_button "Sign In"
page.should have_content('Login Successful')
end
end
J'ai essayé de définir le test ci-dessus avec et sans :type => :feature
. Cela ne fait aucune différence de toute façon. Des idées sur ce que je devrais essayer ensuite?
la source
Réponses:
Essayez d'ajouter:
à votre bloc de configuration.
la source
Capybara
est une constante non définie. Mes tests de concombre utilisent Capybara très bien.L'ajout
require 'rails_helper'
en haut de ma fonctionnalité a fini par résoudre mon problème:Cela me semble étrange puisque tous les exemples que j'ai vus pour rspec et capybara n'avaient pas cette exigence, mais bon. Problème résolu.
Réponse originale (anciennes versions de rspec)
require 'spec_helper'
est utilisé par les anciennes versions de RSpec. La meilleure réponse seraitrequire 'rails_helper'
.la source
Depuis Capybara 2.0, il faut utiliser les spécifications / fonctionnalités de dossier Les commandes Capybara ne fonctionnent plus dans les spécifications / requêtes de dossier.
la source
spec/features
. Mais c'est un point valable pour d'autres personnes qui pourraient avoir des problèmes.mkdir spec/features
et de créer un lien symboliqueln -s spec/features spec/requests
. De cette façon, tous les tests générés seront placés dans le répertoire des fonctionnalités.Essayez d'effectuer toute votre configuration dans un
before
bloc:spec / features / security_spec.rb
la source
visit
fonction n'est disponible que dans unit
bloc. Sourcebefore
bloc s'exécute dans le contexte de l'exemple, doncvisit
fonctionnera là aussi bien que dans unit
bloc.before
blocs, c'est comment j'écris mes spécifications, et elles fonctionnent sans erreur ;-)), donc je pense il est juste d'accepter votre propre réponse.before
c'était toujours dans leit
contexte. Utiliser ceci rendra mes autres tests qui nécessitent une connexion beaucoup plus propreJ'ai aussi eu ce problème,
L'ajout de require 'rails_helper' en haut de ma fonctionnalité a fini par résoudre mon problème:
Et ajoutez le 'config.include Capybara :: DSL' dans rails_helper.rb
la source