Não consigo fazer a capivara funcionar com rspec. Isso me dá este erro:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
Eu sei que há muitos posts sobre isso, mas nenhuma das soluções está funcionando para mim. A maioria deles envolve as especificações que não estão em / spec / features - no qual o meu está.
Primeiro o erro:
$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
Acho importante notar que no início eu estava usando o URL Helper 'new_sessions_path' e ele continuava me dando um erro undefined local variable or method 'new_sessions_path'
. Eu sei que é 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
Meu 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
Tentei definir o teste acima com e sem :type => :feature
. Não faz diferença de qualquer maneira. Alguma ideia do que devo tentar a seguir?
ruby-on-rails
ruby
rspec
capybara
lightswitch05
fonte
fonte
Respostas:
Tente adicionar:
ao seu bloco de configuração.
fonte
Capybara
é uma constante indefinida. Meus testes de pepino estão usando Capivara perfeitamente.Adicionar
require 'rails_helper'
no topo do meu recurso acabou resolvendo meu problema:Isso me parece estranho, já que todos os exemplos que vi de rspec e capivara não tinham esse requerimento, mas tudo bem. Problema resolvido.
Resposta original (versões mais antigas do rspec)
require 'spec_helper'
é usado por versões mais antigas do RSpec. A melhor resposta seriarequire 'rails_helper'
.fonte
Desde o Capybara 2.0, é necessário usar a pasta spec / features. Os comandos do Capybara não funcionam mais na pasta spec / requests.
fonte
spec/features
. Mas esse é um ponto válido para outras pessoas que podem estar tendo problemas.mkdir spec/features
e criar um link simbólicoln -s spec/features spec/requests
. Desta forma, quaisquer testes gerados serão colocados no diretório de recursos.Tente realizar toda a configuração em um
before
bloco:spec / features / security_spec.rb
fonte
visit
função está disponível apenas dentro de umit
bloco. Fontebefore
bloco é executado no contexto de exemplo, entãovisit
funcionará lá tão bem quanto em umit
bloco.before
blocos é como escrevo minhas especificações e elas funcionam sem erros ;-)), então eu acho é justo aceitar sua própria resposta.before
ainda estava dentro doit
contexto. Usar isso tornará meus outros testes que exigem login muito mais limposEu também tive esse problema,
Adicionar require 'rails_helper' na parte superior do meu recurso acabou corrigindo meu problema:
E adicione o 'config.include Capybara :: DSL' em rails_helper.rb
fonte