it-swarm.dev

Rspec لا يرى صفتي النموذجية. خطأ ثابت غير مهيأ

أكتب اختبارات على Rspec لنماذجي في تطبيق Ruby on Rails. أتلقى هذا الخطأ أثناء بدء تشغيل "rspec spec"

command:
/spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError)

يمكنني استخدام Rails 4.0.0 وروبي 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 Model and Class):

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
75
Stan

يفتقد ملف spec_helper بعض الأوامر المهمة. على وجه التحديد ، لا يشمل التكوين/البيئة وتهيئة 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.

77
gmacdougall

في Rails 4.x (rspec-Rails 3.1.0) استخدم

require "Rails_helper"  # this

ليس

require "spec_helper"   # not this

في ملفات المواصفات الخاصة بك

146
Mark Swardstrom

قد ترغب أيضًا في إضافة --require Rails_helper في ملف .rspec بحيث يبدو هكذا.

--color
--require spec_helper
--require Rails_helper

لن تحتاج إلى طلب Rails_helper في جميع المواصفات الخاصة بك ، بعد هذا.

13
Umang Raghuvanshi

أنا أستخدم القضبان 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"

الآن ، قم بتنفيذ هذا الأمر على الجهاز.

تثبيت حزمة

مرة واحدة ذهب أمر حزمة جيدة ، وتنفيذ توليد القضبان. مثل ذلك،

القضبان تولد rspec: تثبيت

السبب: هذا الأمر سيؤدي إلى إنشاء .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. نحن نطلب ذلك.

أتمنى أن يساعدك هذا!

5
Kent Aguilar

لقد تحركت الأمور قليلاً منذ إنشاء هذا الخيط ، لقد عانيت من الخطأ uninitialized constant ClassName (NameError) أيضاً باستخدام Ruby 2.1، Rails 4.2، rspec-Rails 3.3.

لقد قمت بحل مشاكلي في قراءة وثائق جوهرة rspec-Rails:

https://github.com/rspec/rspec-Rails#model-specs

حيث تؤكد ما تقوله Swards عن طلب "Rails_helper" وليس "spec_helper" بعد الآن.

كما أن مواصفات طرازي تبدو أشبه بالمواصفات من مستندات الأحجار الكريمة

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
1
Arnaud Bouchot

إذا لم تنجح الإجابات الأخرى تحت هذا السؤال ، فحاول:

  • تحقق مما إذا كان هناك أي خطأ مطبعي في اسم الملف أو اسم الفئة (يجب أن يتطابق)

غير ذلك،

  • تحقق من ملف config/environment/test.rb الخاص بك ، ومعرفة ما إذا كان هناك config.eager_load = false ، فقم بتعيينه على true.

يجب عليك التحقق من الطلب المكتوب نظرًا لأنك لا ترغب في حل المشكلة عن طريق الخطأ المطبعي هناك.

0
Longfei Wu

تحديد مجلد المصانع في تطبيقك

FactoryBot.define do
  factory :user_params , :class => 'User' do
    username 'Alagesan'
    password '[email protected]'

  end
end

ملف Controller RSpec الخاص بك:

it 'valid params' do
  post :register, params: {:user => user_params } 
end
0
Boobalan