J'écris des tests sur Rspec pour mes modèles dans l'application Ruby on Rails. 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)
J'utilise 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 enfin client.rb (modèle et classe ROR):
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 cela pouvait être utile mon fichier spec_helper.rb:
# 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
--require spec_helper
de.rspec
. Comme il contenait déjà--require rails_helper
, qui était chargé aprèsspec_helper
.Réponses:
Il
spec_helper
manque à votre fichier certaines commandes importantes. Plus précisément, cela n'inclut pas la configuration / l'environnement et l'initialisationrspec-rails
.Vous pouvez ajouter les lignes suivantes au début de votre
spec/spec_helper.rb
fichierENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun'
ou tu peux simplement courir
rails generate rspec:install
et écrasez votre
spec_helper
par un généré pour une utilisation avecrspec-rails
.la source
spec/spec_helper.rb
fichier, donc maintenant vous obtenez également unspec/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 lerails_helper.rb
fichier contient un code similaire au vôtre et devrait être requis lorsque vous souhaitez charger Rails dans vos spécifications.spec_helper.rb
versrails_helper.rb
. Assurez-vous également de lire les commentaires dansrails_helper.rb
cette mention commentrspec-rails
peutinfer_spec_type_from_file_location
, ce qui pourrait vous amener à déplacer vos tests de spécifications dans différents sous-spec/*/
répertoires.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éparer les deux aides. Je pense que vous allez toujours charger des rails_helper (et donc des Rails), même pour les spécifications qui n'ont pas besoin de Rails..travis.yml
tobin/rspec
Dans les rails 4.x (rspec-rails 3.1.0), utilisez
require "rails_helper" # this
ne pas
require "spec_helper" # not this
dans vos fichiers de spécifications
la source
require "rails_helper"
au sommet de mes spécifications et j'étais prêt à partir.Vous pouvez également ajouter
--require rails_helper
dans votre.rspec
fichier pour qu'il ressemble à ceci.--color --require spec_helper --require rails_helper
Vous n'aurez plus besoin d'exiger rails_helper dans toutes vos spécifications, après cela.
la source
J'utilise Rails 5.0.0.1.
Voici comment j'ai résolu ce problème.
Sur votre Gemfile, veuillez ajouter -> gem 'rspec-rails', "> = 2.0.0.beta"
Ainsi,
group :development, :test do gem 'rspec-rails', ">= 2.0.0.beta" end
Raison: si le rspec-rails n'est pas ajouté et lorsque vous exécutez la commande rspec, cela générera cette erreur -> "impossible de charger un tel fichier - rails_helper"
Maintenant, exécutez cette commande sur le terminal.
Une fois que la commande bundle s'est bien déroulée, exécutez la génération des rails. Ainsi,
Raison: cette commande créera un nouveau .rspec (écrasement à l'invite), spec / rails_helper.rb et spec / spec_helper.rb
Maintenant, à ce stade, rspec devrait fonctionner correctement.
Cependant, si vous rencontrez une erreur où le modèle n'est pas trouvé, par exemple impossible de charger un tel fichier - idée , essayez de l'ajouter en haut de votre spec / spec_helper.rb
require 'rubygems' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__)
Raison: il semble que spec_helper ne charge pas l'environnement Rails. Nous en avons besoin.
J'espère que cela t'aides!
la source
Les choses ont un peu bougé depuis la création de ce fil, j'ai également rencontré l'
uninitialized constant ClassName (NameError)
erreur en utilisant Ruby 2.1, Rails 4.2, rspec-rails 3.3.J'ai résolu mes problèmes en lisant la documentation du gem rspec-rails:
https://github.com/rspec/rspec-rails#model-specs
où il confirme ce que Swards dit à propos du besoin de "rails_helper" et non plus de "spec_helper".
De plus, la spécification de mon modèle ressemble plus à celle de la documentation sur les gemmes
RSpec.describe Url, :type => :model do it 'is invalid without first_name', :focus => true do client = Client.new client.should_not be_valid end end
la source
Dossier Usines défini dans votre application
FactoryBot.define do factory :user_params , :class => 'User' do username 'Alagesan' password '$1234@..' end end
Votre fichier Controller RSpec:
it 'valid params' do post :register, params: {:user => user_params } end
la source
Si les autres réponses à cette question ne fonctionnent pas, essayez:
Autrement,
config/environment/test.rb
fichier, voyez s'il y en aconfig.eager_load = false
, réglez-le surtrue
.Vous devriez vérifier l'ordre écrit car vous ne voulez pas résoudre le problème avec la faute de frappe qui s'y trouve.
la source