validations validates validate rails errors ruby-on-rails testing model rspec

ruby-on-rails - validates - rails validations message



Rspec no ve mi modelo Class. error constante no inicializado (6)

Estoy escribiendo pruebas en Rspec para mis modelos en la aplicación Ruby on Rails. Y recibo este error al iniciar ''espec. Rspec''

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

Uso Rails 4.0.0 y Ruby 2.0.0

Aquí está mi 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

Y 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

Y por último 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

Si fuera útil mi archivo 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


En el uso de rieles 4.x (rspec-rails 3.1.0)

require "rails_helper" # this

no

require "spec_helper" # not this

en tus archivos de especificaciones


Estoy usando Rails 5.0.0.1.
Así es como resolví esta preocupación.

En su Gemfile, agregue -> gem ''rspec-rails'', "> = 2.0.0.beta"

Al igual que,

group :development, :test do gem ''rspec-rails'', ">= 2.0.0.beta" end

Motivo: si rspec-rails no se agrega y cuando ejecuta el comando rspec, generará este error -> "no se puede cargar ese archivo - rails_helper"

Ahora, ejecuta este comando en la terminal.

paquete de instalación

Una vez que el comando bundle salió bien, ejecuta los carriles generate. Al igual que,

los rieles generan rspec: instalar

Motivo: este comando creará un nuevo .rspec (sobrescriba cuando se le solicite), spec / rails_helper.rb y spec / spec_helper.rb

Ahora, en este punto, rspec debería funcionar bastante bien.
Sin embargo, si encuentra un error en el que no se encuentra el modelo, por ejemplo , no puede cargar dicho archivo, idea , intente agregarlo encima de su espec. / Spec_helper.rb

require ''rubygems'' ENV["RAILS_ENV"] ||= ''test'' require File.expand_path("../../config/environment", __FILE__)

Motivo: parece que spec_helper no está cargando el entorno Rails. Lo estamos requiriendo

¡Espero que esto ayude!


La carpeta de fábricas define en su aplicación

FactoryBot.define do factory :user_params , :class => ''User'' do username ''Alagesan'' password ''$1234@..'' end end

Su archivo Controller RSpec:

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


Las cosas se han movido un poco desde que se creó este subproceso, también he experimentado el error de uninitialized constant ClassName (NameError) usando Ruby 2.1, Rails 4.2, rspec-rails 3.3.

He resuelto mis problemas al leer la documentación de la gema rspec-rails:

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

donde confirma lo que dice Swards sobre la necesidad de "rails_helper" y no de "spec_helper".

También la especificación de mi modelo se parece más a la de los documentos de gemas

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


Su archivo spec_helper falta algunos comandos importantes. Específicamente, no incluye config / environment e inicializa rspec-rails .

Puede agregar las siguientes líneas al comienzo de su archivo spec/spec_helper.rb

ENV["RAILS_ENV"] ||= ''test'' require File.expand_path("../../config/environment", __FILE__) require ''rspec/rails'' require ''rspec/autorun''

o simplemente puedes correr

rails generate rspec:install

y sobrescribe su spec_helper con uno generado para uso con rspec-rails .


También es posible que --require rails_helper agregar --require rails_helper en su archivo .rspec para que se vea así.

--color --require spec_helper --require rails_helper

No necesitará requerir rails_helper en todas sus especificaciones, después de esto.