J'ai deux classes de modèle dans une relation "parent-chid", ou une association.Test du modèle enfant avec RSPEC et obtention de l'ID de la méthode d'erreur non définie
organizations
est la table parent/le modèle ayant les attributs: id, organization_name, created_at and updated_at
.
events
est la table/modèle enfant ayant les attributs: id, event_description, host_name, created_at, updated_at and organization_id
.
L'association entre les organisations et les dossiers d'événements est events.organization_id = organizations.id
, ou est spécifié dans les classes de modèle:
class Event < ApplicationRecord
...
belongs_to :organization
...
end
class Organization < ApplicationRecord
...
has_many :events, :dependent => :destroy
...
end
Les tests pour le modèle organizations
et organizations
contrôleur fonctionne sans erreur. Le test pour le contrôleur events
n'est pas encore construit. L'application entièrement fonctionnelle et fonctionne sans aucune erreur.
Le problème que j'ai est que je ne peux pas faire passer le test du modèle d'événements.
Voici mon code.
factories/organizations
FactoryGirl.define do
factory :organization do
organization_name { Faker::Company.name }
end
factory :invalid_organization, class: Organization do
organization_name ''
end
end
factories/events
FactoryGirl.define do
factory :event do
event_description { Faker::Lorem.sentence(3) }
host_name { Faker::Internet.domain_name }
organization = build(:organization)
organization_id = organization.id
end
end
Je suis en train de créer une organisation d'abord et utiliser le id
pour l'attribut organization_id
du nouveau event
à créer.
Ce fichier est le event_spec.rb
require 'rails_helper'
RSpec.describe Event, type: :model do
it "has a valid factory" do
event = build(:event)
expect(event).to be_valid
end
it { is_expected.to validate_presence_of(:event_description) }
it { is_expected.to validate_presence_of(:host_name) }
it { is_expected.to validate_presence_of(:organization_id) }
it { is_expected.to belong_to(:organization) }
end
Fondamentalement, je veux d'abord créer une organization
et utiliser ce id
à attribuer à organization_id
quand je suis en train de créer et event
.
Lors du test rspec spec/models/event_spec.rb
Je reçois cette erreur:
/Users/levi/ror/events-handler/spec/factories/events.rb:6:in `block (2 levels) in <top (required)>': undefined method `id' for #<FactoryGirl::Declaration::Static:0x007febc03db798> (NoMethodError)
Je ne sais pas comment le résoudre ou comment écrire un meilleur test?
Dans un premier temps j'ai eu cette erreur: organization_id: néant> pour être valide, mais des erreurs a obtenu: Organisation ne peut être vide. Afin d'éliminer cette erreur j'ai ajouté cette ligne dans la fabrique d'organisation: id {Faker :: Number.number (5)} et après que le test passé avec succès. Merci beaucoup! –
vous ne devez pas définir un ID aléatoire pour 'organisation'. Meilleure option serait de réellement 'create' organisation (au lieu de' build') – faron
Lors de la suppression de la génération d'ID de l'usine d'organisation et en remplaçant dans votre solution l'organisation en ligne {build (: organisation)} avec l'organisation en ligne = FactoryGirl.create (: organisation), j'obtiens l'erreur: /Users/levi/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/factory_girl-4.7.0/lib/factory_girl/registry.rb: 24: dans 'trouver ': Usine non enregistrée: organisation (ArgumentError) –