RubyアプリケーションのRailsでモデルのRspecのテストを書いています。 「rspec spec」の起動中にこのエラーが表示されます
command:
/spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError)
Rails 4.0.0およびRuby 2.0.0を使用します
ここに私の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
そして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
そして、ついにclient.rb(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
私の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
spec_helper
ファイルにいくつかの重要なコマンドがありません。具体的には、config/environmentおよびrspec-Rails
の初期化は含まれません。
spec/spec_helper.rb
ファイルの先頭に次の行を追加できます
ENV["Rails_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/Rails'
require 'rspec/autorun'
または、あなたはただ走ることができます
Rails generate rspec:install
spec_helper
で使用するために生成されたものでrspec-Rails
を上書きします。
Rails 4.x(rspec-Rails 3.1.0)で使用
require "Rails_helper" # this
じゃない
require "spec_helper" # not this
スペックファイル内
--require Rails_helper
ファイルに.rspec
を追加して、次のようにすることもできます。
--color
--require spec_helper
--require Rails_helper
この後、すべての仕様でRails_helperを要求する必要はありません。
Rails 5.0.0.1。を使用しています
この懸念を解決した方法を次に示します。
Gemfileに-> gem 'rspec-Rails'、 "> = 2.0.0.beta"を追加してください
そのようです、
group :development, :test do
gem 'rspec-Rails', ">= 2.0.0.beta"
end
理由: rspec-Railsが追加されておらず、rspecコマンドを実行すると、このエラーが生成されます-> "そのようなファイルをロードできません-Rails_helper"
次に、ターミナルでこのコマンドを実行します。
バンドルインストール
Bundleコマンドが正常になったら、Rails generateを実行します。そのようです、
Railsはrspec:installを生成します
理由:このコマンドは、新しい.rspec(プロンプトが表示されたときに上書きする)、spec/Rails_helper.rbおよびspec/spec_helper.rbを作成します
さて、この時点で、rspecはほぼ正しく動作するはずです。
ただし、モデル内で見つからないエラーが発生した場合そのようなファイルをロードできません-idea、spec/spec_helper.rbの上にこれを追加してみてください
require 'rubygems'
ENV["Rails_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
理由: spec_helperがRails環境をロードしていないようです。それが必要です。
お役に立てれば!
このスレッドが作成されてから物事は少し動きましたが、Ruby 2.1、Rails 4.2、rspec-Rails 3.3を使用してuninitialized constant ClassName (NameError)
エラーも発生しました。
Rspec-Rails gemドキュメントを読んで問題を解決しました:
https://github.com/rspec/rspec-Rails#model-specs
ここでは、「spec_helper」ではなく「Rails_helper」を要求することについてSwardsが言っていることを確認します。
また、私のモデルの仕様は、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
この質問の下で他の回答が機能しない場合は、試してください:
そうでなければ、
config/environment/test.rb
ファイルを確認し、config.eager_load = false
があるかどうかを確認して、true
に設定します。タイプミスの問題を解決したくないので、書面で確認してください。
ファクトリーフォルダーはアプリで定義します
FactoryBot.define do
factory :user_params , :class => 'User' do
username 'Alagesan'
password '$1234@..'
end
end
コントローラーRSpecファイル:
it 'valid params' do
post :register, params: {:user => user_params }
end