Je veux tester un modèle avec RSpec mais je suis probablement tombé sur une faute de frappe que je ne trouve pas. Quelqu'un peut-il m'aider s'il vous plaît un peu? Cela fait longtemps que je lutte avec cela et je ne trouve aucune erreur. Merci d'avance!
user_spec.rb
require 'spec_helper'
describe User do
it "has a valid factory" do
FactoryGirl.build(:user).should be_valid
end
it "is invalid without an e-mail"
it "is invalid without a correct e-mail"
it "is invalid without a password"
it "is invalid without a matching password confrimation"
end
user.rb
FactoryGirl.define do
factory :user do |f|
f.email "[email protected]"
f.password "Ruby"
f.password_confrimation "Ruby"
end
end
spec_helper.rb
# This file is copied to spec/ when you run 'Rails generate rspec:install'
ENV["Rails_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/Rails'
require 'rspec/autorun'
require 'factory_girl'
# Requires supporting Ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
RSpec.configure do |config|
# ## Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# If true, the base class of anonymous controllers will be inferred
# automatically. This will be the default behavior in future versions of
# rspec-Rails.
config.infer_base_class_for_anonymous_controllers = false
# 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"
end
erreur
Factory not registered: user
Vous avez votre définition d'usine dans le mauvais fichier, selon votre question, il se trouve dans user.rb. Cela doit être dans un fichier factories.rb de votre dossier de test (spec) si vous utilisez rspec
# user.rb
FactoryGirl.define do
factory :user do |f|
f.email "[email protected]"
f.password "Ruby"
f.password_confrimation "Ruby"
end
end
Changer ci-dessus à cela, (vous n'avez pas non plus besoin de la variable f)
# spec/factories.rb
FactoryGirl.define do
factory :user do
email "[email protected]"
password "Ruby"
password_confrimation "Ruby"
end
end
De plus, comme le disent les commentaires, assurez-vous que gem 'factory_girl_Rails'
est dans votre Gemfile
, au lieu de simplement gem 'factory_girl'
J'avais rencontré le problème suivant avec la structure dans mon dossier factories /
- factories/
-- artists.rb
-- techniques.rb
artists.rb
FactoryBot.define do
factory :artist do
name 'Michael'
technique FactoryBot.create :technique
end
end
techniques.rb
FactoryBot.define do
factory :technique do
name 'Some name'
end
end
C'était donc charger l'artiste avant que l'objet technique ne soit chargé. Donc, il n'a pas pu le trouver. La solution consiste à ne pas utiliser FactoryBot imbriqué créer dans des usines ni à renommer vos usines imbriquées en quelque chose qui précède votre usine parente.
Je viens de déménager mon atelier technique. à factories.rb
et défini ici. Et le problème a été résolu.
J'ai eu le même problème et la seule chose que j'ai ajoutée était un fichier factories.rb. Tous les tests ont passé de cela.