Ich kann Capybara nicht dazu bringen, mit rspec zu arbeiten. Es gibt mir diesen Fehler:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
Ich weiß, dass es viele Beiträge dazu gibt, aber keine der Lösungen funktioniert für mich. Bei den meisten handelt es sich um Spezifikationen, die nicht in / spec / features enthalten sind - in denen sich meine befinden.
Zuerst der Fehler:
$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
Ich denke, es ist wichtig zu beachten, dass ich zuerst den URL-Helfer 'new_sessions_path' verwendet habe und es mir immer wieder einen Fehler gab undefined local variable or method 'new_sessions_path'
. Ich weiß, dass es gültig ist, weil:
$ 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
Mein 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 innerhalb von 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
Ich habe versucht, den obigen Test sowohl mit als auch ohne zu definieren :type => :feature
. Es macht so oder so keinen Unterschied. Irgendwelche Ideen, was ich als nächstes versuchen sollte?
quelle
Antworten:
Versuchen Sie hinzuzufügen:
zu Ihrem Konfigurationsblock.
quelle
Capybara
die eine undefinierte Konstante ist. Meine Gurkentests verwenden Capybara ganz gut.Das Hinzufügen
require 'rails_helper'
oben in meiner Funktion hat mein Problem behoben:Dies scheint mir seltsam, da jedes Beispiel, das ich für rspec und capybara gesehen habe, diese Anforderung nicht hatte, aber na ja. Problem gelöst.
Originalantwort (ältere Versionen von rspec)
require 'spec_helper'
wird von älteren Versionen von RSpec verwendet. Die bessere Antwort wärerequire 'rails_helper'
.quelle
Seit Capybara 2.0 muss man Ordnerspezifikationen / Funktionen verwenden. Capybara-Befehle funktionieren nicht mehr in Ordnerspezifikationen / -anforderungen.
quelle
spec/features
. Dies ist jedoch ein gültiger Punkt für andere Personen, die möglicherweise Probleme haben.mkdir spec/features
und einen symbolischen Link zu erstellenln -s spec/features spec/requests
. Auf diese Weise werden alle generierten Tests im Funktionsverzeichnis abgelegt.Versuchen Sie, alle Einstellungen in einem
before
Block durchzuführen :spec / features / security_spec.rb
quelle
visit
Funktion ist nur innerhalb einesit
Blocks verfügbar . Quellebefore
Block wird im Beispielkontext ausgeführt undvisit
funktioniert daher sowohl dort als auch in einemit
Block.before
Blöcken einrichten ist, wie ich meine Spezifikationen schreibe, und sie funktionieren ohne Fehler ;-)), denke ich Es ist fair, deine eigene Antwort zu akzeptieren.before
noch imit
Kontext befinde . Mit diesem wird meine andere Tests machen , die Login viel sauberer benötigenIch hatte auch dieses Problem,
Das Hinzufügen von require 'rails_helper' oben in meiner Funktion hat mein Problem behoben:
Und fügen Sie die 'config.include Capybara :: DSL' in rails_helper.rb hinzu
quelle