Rspec ne voit pas mon modèle de Classe. uninitialized constant d'erreur
Je suis en train d'écrire des tests sur Rspec pour mes modèles en Ruby on Rails application.
Et je reçois cette erreur lors du démarrage de 'rspec spec'
command:
/spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError)
- Je utiliser Rails 4.0.0 et Ruby 2.0.0
Voici mon client_spec.rb:
require 'spec_helper'
describe Client do
it 'is invalid without first_name', :focus => true do
client = Client.new
client.should_not be_valid
end
end
Et Gemfile:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.rc1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0.rc1'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more:
gem 'turbolinks'
gem 'jbuilder', '~> 1.0.1'
group :development do
gem 'rspec-rails'
end
group :doc do
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', require: false
end
group :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'database_cleaner'
end
Et au dernier client.rb (ROR Modèle et de la Classe):
class Client < ActiveRecord::Base
has_many :cars
has_many :orders
has_one :client_status
has_one :discount_plan, through: :client_status
validates :email, format: { with: /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})\z/, :message => "Only emails allowed", :multiline => true }
validates :email, presence: true, if: "phone.nil?"
#validates :phone, presence: true, if: "email.nil?"
validates :last_name, :first_name, presence: true
validates :last_name, :first_name, length: {
minimum: 2,
maximum: 500,
wrong_length: "Invalid length",
too_long: "%{count} characters is the maximum allowed",
too_short: "must have at least %{count} characters"
}
end
Si il serais utile mon spec_helper.rb.rb fichier:
# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# Require this file using `require "spec_helper"` to ensure that it is only
# loaded once.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
config.run_all_when_everything_filtered = true
config.filter_run :focus
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = 'random'
#config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
- Ce qui a fonctionné pour moi a été de retirer la ligne
--require spec_helper
de.rspec
. Comme elle l'a déjà contenues--require rails_helper
, qui a été chargé aprèsspec_helper
.
Vous devez vous connecter pour publier un commentaire.
Votre
spec_helper
fichier est manquant quelques commandes importantes. Plus précisément, il n'est pas, y compris config/environment et de l'initialisation d'rspec-rails
.Vous pouvez ajouter les lignes suivantes au début de votre
spec/spec_helper.rb
fichierou vous pouvez simplement exécuter
et remplacer votre
spec_helper
avec celui généré pour une utilisation avecrspec-rails
.spec/spec_helper.rb
fichier, alors maintenant, vous obtenez également unespec/rails_helper.rb
fichier. Si vous exécutezrails generate rspec:install
, c'est ce qu'il produit (rspec-rails 3.0.1, rails 4.1.1). Il s'avère que lesrails_helper.rb
fichier contient du code similaire à la vôtre et devrait être nécessaire lorsque vous souhaitez charger des Rails à vos spécifications.spec_helper.rb
enrails_helper.rb
. Aussi, assurez-vous de lire les commentaires enrails_helper.rb
qui mentionnent commentrspec-rails
peutinfer_spec_type_from_file_location
, ce qui pourrait vous faire déménager votre spec tests dans différentsspec/*/
sous-dossiers.spec/rails_helper.rb
automatiquement, vous pouvez le faire dans votre.rspec
en ajoutant--require rails_helper
--require rails_helper
à.rspec
vaincre le point de séparation des deux aides. Je pense alors que vous serez toujours en chargement rails_helper (et donc des Rails), même pour des spécifications qui n'ont pas besoin de Rails..travis.yml
àbin/rspec
Dans les rails 4.x (rspec-rails 3.1.0) utilisation
pas
dans vos fichiers de spec
Vous pouvez également ajouter
--require rails_helper
dans votre.rspec
fichier de sorte qu'il ressemble à ceci.Vous n'aurez pas besoin d'exiger rails_helper dans toutes vos spécifications, après ce.
Je suis en utilisant Rails 5.0.0.1.
Voici comment j'ai résolu ce problème.
Sur votre Gemfile, s'il vous plaît ajouter -> gem 'rspec rails', ">= 2.0.0.bêta"
Comme,
Raison: si la rspec-rails n'est pas ajouté et lors de l'exécution de la rspec de commande, il va générer cette erreur -> "impossible de charger le fichier -- rails_helper"
Maintenant, exécutez cette commande sur le terminal.
Une fois faisceau de commande s'est bien, exécuter les rails de générer. Comme si,
Raison: cette commande va créer un nouveau .rspec(hit écraser lorsque le système le demande), spec/rails_helper.rb et spec/spec_helper.rb.rb
Maintenant, à ce stade, rspec doit à peu près fonctionner correctement.
Toutefois, si vous rencontrez une erreur dans le modèle n'est pas trouvé par exemple ne peut pas charger le fichier -- idée, essayez d'ajouter ce sur le dessus de votre spec/spec_helper.rb.rb
Raison: semble que spec_helper.rb n'est pas le chargement de l'environnement Rails. Nous sommes le nécessitant.
Espérons que cette aide!
Les choses ont évolué un peu depuis ce thread a été créé, j'ai expérimenté la
uninitialized constant ClassName (NameError)
erreur aussi à l'aide de Ruby 2.1, Rails 4.2, rspec-rails 3.3.J'ai résolu mes problèmes de lecture de la rspec-gem rails de la documentation :
https://github.com/rspec/rspec-rails#model-specs
où il confirme ce que les Sabres dit au sujet de l'obligation "rails_helper" pas "spec_helper.rb" plus.
Aussi mon spécification du modèle ressemble plus à celui de la gemme docs
Usines dossier de définir dans votre application
Votre Contrôleur de RSpec fichier:
Si d'autres réponses à cette question ne fonctionne pas, essayez:
D'autres sages,
config/environment/test.rb
fichier,voir si il n'y a
config.eager_load = false
, iltrue
.Vous devez vérifier dans l'ordonnance écrite, puisque vous ne voulez pas résoudre le problème avec la typo pose là.