36 votes

Documents intégrés Factory Girl + Mongoid dans les fixtures

Disons que vous avez les documents mongoïdes suivants:

 class User
    include Mongoid::Document
    embeds_one :name
end

class UserName
    include Mongoid::Document
    field :first
    field :last_initial

    embedded_in :user
end
 

Comment créer une fabrique fille qui initialise le prénom et l'initiale incorporés? Comment feriez-vous cela avec une relation embeds_many ?

63voto

index Points 1018

Je recherchais également celui-ci et, alors que je faisais des recherches, je suis tombé sur beaucoup de codes et les ai tous rassemblés (j'aimerais bien qu'il y ait de meilleurs documents), mais voici ma partie du code. Address est une relation 1..1 et Phones est une relation 1..n avec des événements.

   factory :event do
    title     'Example Event'

    address  { FactoryGirl.build(:address) }
    phones    { [FactoryGirl.build(:phone1), FactoryGirl.build(:phone2)] }
  end

  factory :address do
    place     'foobar tower'
    street    'foobar st.'
    city      'foobar city'
  end

  factory :phone1, :class => :phone do
    code      '432'
    number    '1234567890'
  end

  factory :phone2, :class => :phone do
    code      '432'
    number    '0987654321'
  end
 

(Et désolé si je ne peux pas fournir mes liens, ils étaient un peu foirés)

6voto

emkman Points 181

Voici une solution qui vous permet de définir de manière dynamique le nombre d'objets incorporés:

 FactoryGirl.define do
  factory :profile do
    name 'John Doe'
    email 'john@bigcorp.com'
    user

    factory :profile_with_notes do
      ignore do
        notes_count 2
      end

      after(:build) do |profile, evaluator|
        evaluator.notes_count.times do
          profile.notes.build(FactoryGirl.attributes_for(:note))
        end
      end
    end
  end
end
 

Cela vous permet d'appeler FactoryGirl.create(:profile_with_notes) et d'obtenir deux notes intégrées ou d'appeler FactoryGirl.create(:profile_with_notes, notes_count: 5) et d'obtenir cinq notes intégrées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X