Ich schreibe Tests für Rspec für meine Modelle in der Ruby on Rails-Anwendung ... und erhalte diese Fehlermeldung beim Starten von 'rspec spec'.
command:
/spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError)
Ich verwende Rails 4.0.0 und Ruby 2.0.0
Hier ist meine 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
Und 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
Und zuletzt client.rb (ROR-Modell und Klasse):
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
Wenn es nützlich wäre meine spec_helper.rb Datei:
# 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
In Ihrer spec_helper
-Datei fehlen einige wichtige Befehle. Konkret beinhaltet es nicht config/environment und initialisiert rspec-Rails
.
Sie können die folgenden Zeilen am Anfang Ihrer spec/spec_helper.rb
-Datei hinzufügen
ENV["Rails_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/Rails'
require 'rspec/autorun'
oder du kannst einfach laufen
Rails generate rspec:install
und überschreiben Sie Ihren spec_helper
mit einem zur Verwendung mit rspec-Rails
generierten Code.
In Rails 4.x (rspec-Rails 3.1.0) verwenden
require "Rails_helper" # this
nicht
require "spec_helper" # not this
in Ihren Spec-Dateien
Vielleicht möchten Sie auch --require Rails_helper
in Ihre .rspec
-Datei einfügen, so dass es so aussieht.
--color
--require spec_helper
--require Rails_helper
Danach müssen Sie nicht mehr Rails_helper in allen Ihren Spezifikationen benötigen.
Ich verwende Rails 5.0.0.1.
So habe ich dieses Anliegen gelöst.
Fügen Sie Ihrem Gemfile bitte -> gem 'rspec-Rails' hinzu, "> = 2.0.0.beta"
Wie so
group :development, :test do
gem 'rspec-Rails', ">= 2.0.0.beta"
end
Grund: Wenn rspec-Rails nicht hinzugefügt wird und wenn Sie den Befehl rspec ausführen, wird dieser Fehler generiert. -> "Diese Datei kann nicht geladen werden - Rails_helper"
Führen Sie diesen Befehl jetzt auf dem Terminal aus.
bundle installieren
Sobald der Bundle-Befehl erfolgreich war, führen Sie die Rails-Generierung aus. Wie so
Rails erzeugen rspec: install
Grund: Dieser Befehl erstellt eine neue .rspec (Überschreiben, wenn Sie dazu aufgefordert werden), spec/Rails_helper.rb und spec/spec_helper.rb
Nun, zu diesem Zeitpunkt sollte rspec ziemlich gut laufen.
Wenn jedoch ein Fehler auftritt, der nicht im Modell enthalten ist, z. Diese Datei kann nicht geladen werden - Idee. Versuchen Sie, diese über Ihre spec/spec_helper.rb hinzuzufügen
require 'rubygems'
ENV["Rails_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
Grund: scheint, dass spec_helper die Rails-Umgebung nicht lädt. Wir brauchen es.
Hoffe das hilft!
Seitdem dieser Thread erstellt wurde, hat sich etwas bewegt. Ich habe auch den Fehler uninitialized constant ClassName (NameError)
mit Ruby 2.1, Rails 4.2, rspec-Rails 3.3.
Ich habe meine Probleme beim Lesen der Dokumentation zu rspec-Rails gem gelöst:
https://github.com/rspec/rspec-Rails#model-specs
dort wird bestätigt, was Swards sagt, dass "Rails_helper" nicht mehr "spec_helper" erforderlich ist.
Auch meine Modellspezifikation ähnelt eher der von den gem docs
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
Wenn andere Antworten unter dieser Frage nicht funktionieren, versuchen Sie Folgendes:
Andernfalls,
config/environment/test.rb
-Datei...., Ob es config.eager_load = false
gibt, und setzen Sie ihn auf true
.Sie sollten die schriftliche Reihenfolge überprüfen, da Sie das Problem nicht mit dem Tippfehler lösen möchten.
Fabriken Ordner in Ihrer App definieren
FactoryBot.define do
factory :user_params , :class => 'User' do
username 'Alagesan'
password '[email protected]'
end
end
Ihre Controller-RSpec-Datei:
it 'valid params' do
post :register, params: {:user => user_params }
end