Ich schreibe Tests auf Rspec für meine Modelle in der Ruby on Rails-Anwendung. Und ich erhalte diesen Fehler beim Starten von 'rspec spec'
command:
/spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError)
Ich benutze 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 endlich 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 Datei 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
ruby-on-rails
testing
model
rspec
Stan
quelle
quelle
--require spec_helper
von.rspec
. Wie es bereits enthielt--require rails_helper
, wurde das nach geladenspec_helper
.Antworten:
In Ihrer
spec_helper
Datei fehlen einige wichtige Befehle. Insbesondere werden Konfiguration / Umgebung und Initialisierung nicht berücksichtigtrspec-rails
.Sie können die folgenden Zeilen am Anfang Ihrer
spec/spec_helper.rb
Datei hinzufügenoder du kannst einfach rennen
und überschreiben Sie Ihre
spec_helper
mit einer für die Verwendung mit generiertrspec-rails
.quelle
spec/spec_helper.rb
Datei, sodass Sie jetzt auch einespec/rails_helper.rb
Datei erhalten. Wenn Sie ausführenrails generate rspec:install
, wird dies erzeugt (rspec-Rails 3.0.1, Rails 4.1.1). Es stellt sich heraus, dass dierails_helper.rb
Datei einen ähnlichen Code wie Sie enthält und erforderlich sein sollte, wenn Sie Rails in Ihre Spezifikationen laden möchten.spec_helper.rb
in verschoben werden sollterails_helper.rb
. Lesen Sie auch die Kommentare inrails_helper.rb
dieser Erwähnung, wierspec-rails
dies möglich ist. Dadurch könneninfer_spec_type_from_file_location
Sie Ihre Spezifikationstests möglicherweise in verschiedenespec/*/
Unterverzeichnisse verschieben .spec/rails_helper.rb
automatisch aufnehmen möchten, können Sie dies in Ihrem tun,.rspec
indem Sie--require rails_helper
--require rails_helper
,.rspec
um den Punkt der Trennung der beiden Helfer zu besiegen. Ich denke, dann werden Sie immer rails_helper (und damit Rails) laden, auch für Spezifikationen, die keine Rails benötigen..travis.yml
aufbin/rspec
In Schienen 4.x (rspec-Schienen 3.1.0) verwenden
nicht
in Ihren Spezifikationsdateien
quelle
require "rails_helper"
an der Spitze meiner Spezifikation und ich war gut zu gehen.Möglicherweise möchten Sie auch
--require rails_helper
Ihre.rspec
Datei hinzufügen, damit sie so aussieht.Danach müssen Sie rails_helper nicht mehr in all Ihren Spezifikationen benötigen.
quelle
Ich benutze Rails 5.0.0.1.
So habe ich dieses Problem gelöst.
Fügen Sie in Ihrer Gemfile -> gem 'rspec-Rails', "> = 2.0.0.beta" hinzu.
Wie so,
Grund: Wenn die rspec-Rails nicht hinzugefügt werden und Sie den Befehl rspec ausführen, wird dieser Fehler generiert -> "Eine solche Datei kann nicht geladen werden - rails_helper"
Führen Sie nun diesen Befehl auf dem Terminal aus.
Sobald der Bundle-Befehl erfolgreich war, führen Sie die generierten Rails aus. Wie so,
Grund: Dieser Befehl erstellt eine neue .rspec (klicken Sie auf Überschreiben, wenn Sie dazu aufgefordert werden), spec / rails_helper.rb und spec / spec_helper.rb
Jetzt, an diesem Punkt, sollte rspec so ziemlich richtig laufen.
Wenn Sie jedoch auf einen Fehler stoßen, bei dem das Modell nicht gefunden wird, z. B. eine solche Datei nicht laden kann , versuchen Sie, diese über Ihre spec / spec_helper.rb hinzuzufügen
Grund: Anscheinend lädt spec_helper die Rails-Umgebung nicht. Wir brauchen es.
Hoffe das hilft!
quelle
Die Dinge haben sich ein wenig bewegt, seit dieser Thread erstellt wurde. Ich habe den
uninitialized constant ClassName (NameError)
Fehler auch bei der Verwendung von Ruby 2.1, Rails 4.2, rspec-Rails 3.3 festgestellt .Ich habe meine Probleme beim Lesen der rspec-Rails Gem-Dokumentation gelöst:
https://github.com/rspec/rspec-rails#model-specs
Hier wird bestätigt, was Swards über das Erfordernis von "rails_helper" und nicht mehr von "spec_helper" sagt.
Auch meine Modellspezifikation ähnelt eher der aus den Gem-Dokumenten
quelle
Der Ordner "Fabriken" wird in Ihrer App definiert
Ihre Controller-RSpec-Datei:
quelle
Wenn andere Antworten unter dieser Frage nicht funktionieren, versuchen Sie:
Andernfalls,
config/environment/test.rb
Datei, prüfen Sie , ob sie vorhanden istconfig.eager_load = false
, und setzen Sie sie auftrue
.Sie sollten die schriftliche Reihenfolge einchecken, da Sie das Problem mit dem dort liegenden Tippfehler nicht lösen möchten.
quelle