No puedo hacer que el capibara funcione con rspec. Me da este error:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
Sé que hay muchas publicaciones sobre esto, pero ninguna de las soluciones me funciona. La mayoría de ellos implican que las especificaciones no están en / spec / features, en lo que está la mía.
Primero el error:
$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
Creo que es importante tener en cuenta que al principio estaba usando URL Helper 'new_sessions_path' y seguía dándome un error undefined local variable or method 'new_sessions_path'
. Sé que es válido porque:
$ 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
Mi 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 dentro 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
Intenté definir la prueba anterior con y sin :type => :feature
. No hay diferencia de ninguna manera. ¿Alguna idea de lo que debería probar a continuación?
ruby-on-rails
ruby
rspec
capybara
lightswitch05
fuente
fuente
Respuestas:
Intenta agregar:
a su bloque de configuración.
fuente
Capybara
es una constante indefinida. Mis pruebas de pepino están usando Capybara muy bien.Agregar
require 'rails_helper'
en la parte superior de mi función terminó solucionando mi problema:Esto me parece extraño, ya que todos los ejemplos que he visto de rspec y carpincho no tenían ese requisito, pero bueno. Problema resuelto.
Respuesta original (versiones anteriores de rspec)
require 'spec_helper'
es utilizado por versiones anteriores de RSpec. La mejor respuesta seríarequire 'rails_helper'
.fuente
Desde Capybara 2.0, uno tiene que usar especificaciones / características de carpeta. Los comandos de Capybara ya no funcionan en especificaciones / solicitudes de carpeta.
fuente
spec/features
. Pero ese es un punto válido para otras personas que podrían estar teniendo problemas.mkdir spec/features
y crear un enlace simbólicoln -s spec/features spec/requests
. De esta manera, las pruebas generadas se colocarán en el directorio de características.Intente realizar toda su configuración en un
before
bloque:spec / features / security_spec.rb
fuente
visit
función solo está disponible dentro de unit
bloque. Fuentebefore
bloque se ejecuta en el contexto de ejemplo, porvisit
lo que funcionará tanto allí como en unit
bloque.before
bloques es cómo escribo mis especificaciones, y funcionan sin errores ;-)), así que creo es justo aceptar tu propia respuesta.before
todavía estaba dentro delit
contexto. Usar esto hará que mis otras pruebas que requieren inicio de sesión sean mucho más limpiasYo también tuve este problema,
Agregar require 'rails_helper' en la parte superior de mi función terminó solucionando mi problema:
Y agregue el 'config.include Capybara :: DSL' en rails_helper.rb
fuente