Saya menulis tes di Rspec untuk model saya di aplikasi Ruby on Rails. Dan saya menerima kesalahan ini saat memulai 'rspec spec'
command:
/spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError)
Saya menggunakan Rails 4.0.0 dan Ruby 2.0.0
Ini client_spec.rb saya:
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
Dan 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
Dan terakhir client.rb (Model dan Kelas 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
Jika akan berguna file spec_helper.rb saya:
# 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
sumber
sumber
--require spec_helper
dari.rspec
. Seperti yang sudah terkandung--require rails_helper
, yang dimuat setelahnyaspec_helper
.Jawaban:
spec_helper
File Anda kehilangan beberapa perintah penting. Secara khusus, ini tidak termasuk config / environment dan inisialisasirspec-rails
.Anda dapat menambahkan baris berikut ke awal
spec/spec_helper.rb
file AndaENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun'
atau Anda bisa lari saja
rails generate rspec:install
dan menimpa Anda
spec_helper
dengan yang dibuat untuk digunakan denganrspec-rails
.sumber
spec/spec_helper.rb
file, jadi sekarang Anda juga mendapatkanspec/rails_helper.rb
file. Jika Anda menjalankanrails generate rspec:install
, inilah yang dihasilkannya (rspec-rails 3.0.1, rails 4.1.1). Ternyatarails_helper.rb
file tersebut berisi beberapa kode yang mirip dengan milik Anda dan harus diperlukan saat Anda ingin memuat Rails dalam spesifikasi Anda.spec_helper.rb
dalamrails_helper.rb
. Juga, pastikan untuk membaca komentar dalamrails_helper.rb
penyebutan howrspec-rails
caninfer_spec_type_from_file_location
, yang mungkin membuat Anda merelokasi pengujian spesifikasi Anda kespec/*/
subdirektori yang berbeda .spec/rails_helper.rb
secara otomatis Anda dapat melakukannya.rspec
dengan menambahkan--require rails_helper
--require rails_helper
untuk.rspec
mengalahkan titik memisahkan dua pembantu. Saya pikir Anda akan selalu memuat rails_helper (dan karenanya Rails), bahkan untuk spesifikasi yang tidak memerlukan Rails..travis.yml
kebin/rspec
Di rel 4.x (rspec-rails 3.1.0) gunakan
require "rails_helper" # this
tidak
require "spec_helper" # not this
di file spesifikasi Anda
sumber
require "rails_helper"
ke bagian atas spesifikasi saya dan saya siap melakukannya.Anda mungkin juga ingin menambahkan file
--require rails_helper
Anda.rspec
sehingga terlihat seperti ini.--color --require spec_helper --require rails_helper
Anda tidak perlu membutuhkan rails_helper di semua spesifikasi Anda, setelah ini.
sumber
Saya menggunakan Rails 5.0.0.1.
Inilah cara saya menyelesaikan masalah ini.
Pada Gemfile Anda, tambahkan -> gem 'rspec-rails', "> = 2.0.0.beta"
Seperti itu,
group :development, :test do gem 'rspec-rails', ">= 2.0.0.beta" end
Alasan: jika rspec-rails tidak ditambahkan dan ketika Anda menjalankan perintah rspec, ini akan menghasilkan kesalahan ini -> "tidak dapat memuat file seperti itu - rails_helper"
Sekarang, jalankan perintah ini di terminal.
Setelah perintah bundle berjalan dengan baik, jalankan rails generate. Seperti itu,
Alasan: perintah ini akan membuat .rspec baru (tekan timpa saat diminta), spec / rails_helper.rb dan spec / spec_helper.rb
Sekarang, pada titik ini, rspec seharusnya berjalan dengan baik.
Namun, jika Anda menemukan kesalahan di mana dalam model tidak ditemukan misalnya tidak dapat memuat file seperti itu - ide , coba tambahkan ini di atas spec / spec_helper.rb Anda
require 'rubygems' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__)
Alasan: tampaknya spec_helper tidak memuat lingkungan Rails. Kami membutuhkannya.
Semoga ini membantu!
sumber
Banyak hal telah
uninitialized constant ClassName (NameError)
berubah sejak utas ini dibuat, saya telah mengalami kesalahan juga menggunakan Ruby 2.1, Rails 4.2, rspec-rails 3.3.Saya telah memecahkan masalah saya dalam membaca dokumentasi permata rspec-rails:
https://github.com/rspec/rspec-rails#model-specs
yang menegaskan apa yang dikatakan Swards tentang mengharuskan "rails_helper" bukan "spec_helper" lagi.
Juga spesifikasi model saya lebih mirip dengan yang ada di dokumen permata
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
sumber
Folder pabrik ditentukan di aplikasi Anda
FactoryBot.define do factory :user_params , :class => 'User' do username 'Alagesan' password '$1234@..' end end
File Controller RSpec Anda:
it 'valid params' do post :register, params: {:user => user_params } end
sumber
Jika jawaban lain di bawah pertanyaan ini tidak berhasil, coba:
Jika tidak,
config/environment/test.rb
file Anda , lihat apakah adaconfig.eager_load = false
, setel ketrue
.Anda harus memeriksa dalam urutan tertulis karena Anda tidak ingin menyelesaikan masalah dengan kesalahan ketik yang ada di sana.
sumber