Производители, отказывающиеся от монгоида от проверки - PullRequest
1 голос
/ 04 августа 2011

Я не могу запустить ни один мой тест, поскольку каждый пользователь, которого я пытаюсь сфабриковать, генерирует ошибки проверки.

У меня есть следующий тест.

class BillTest < ActiveSupport::TestCase

  def setup
    load_all_sponsors
    @the_bill = Bill.new(:govtrack_name => "h1")
    @user1 = Fabricate(:user1)
    @user2 = Fabricate(:user2)

Мои измышления определяются:

Fabricator(:user) do
   email      'another_user_here@domain.com'
   name       'anew user'
   roles_mask 1
   password   "secret"
   password_confirmation "secret"
   polco_groups {[Fabricate(:polco_group, :name => 'foreign', :type => :custom)]}
end

Fabricator(:admin, :class_name => :user) do
  email 'admin@yourdomain.com'
  name  'Administrator'
  roles_mask  5
  password   "secret"
  password_confirmation "secret"
end

Fabricator(:registered, :class_name => :user) do
   email      'registered_user@domain.com'
   name       'Tim TheRegistered'
   roles_mask 2
   password   "the_secret"
   password_confirmation "the_secret"
   polco_groups {[Fabricate(:polco_group, {:name => 'AL', :type => :state}),
              Fabricate(:polco_group, {:name => 'AL01', :type => :district}),
              Fabricate(:polco_group, {:name => "Kirk\'s Kids" , :type => :custom})]}
end

Fabricator(:user1, :class_name => :user) do
   email      'user1@domain.com'
   name       'User1'
   roles_mask 2
   password   "the_big_secret"
   password_confirmation "the_big_secret"
   polco_groups {[Fabricate(:polco_group, {:name => 'AL', :type => :state}),
              Fabricate(:polco_group, {:name => 'AL01', :type => :district}),
              Fabricate(:polco_group, {:name => "Kirk\'s Kids" , :type => :custom})]}
end

Fabricator(:user2, :class_name => :user) do
   email      'user2@domain.com'
   name       'User2'
   roles_mask 2
   password   "the_big_secret"
   password_confirmation "the_big_secret"
   polco_groups {[Fabricate(:polco_group, {:name => 'AL', :type => :state}),
              Fabricate(:polco_group, {:name => 'FL01', :type => :district}),
              Fabricate(:polco_group, {:name => "Ft. Sam Washington 1st Grade" , :type => :custom})]}
end

Независимо от того, какой тест выполняется, я получаю ту же ошибку

  9) Error:
test_update_from_directory(BillTest):
Mongoid::Errors::Validations: Validation failed - Email is already taken, Email is already taken, Name is already taken.
    test/unit/bill_test.rb:8:in `setup'

Я пробовал несколько разных производителей, наследующих разными способами, и ничто не может пройти мимо этой ошибки. Я довольно отчаянно нуждаюсь в помощи в этом.

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

После рассмотрения проблем Machinist и Fabricator с Mongoid я остановился на FactoryGirl - синтаксис выглядит как шаг назад - но он работает.

Проблемы, которые у меня были с остальными, были связаны с валидацией, ИППП и полиморфизмом.

0 голосов
/ 04 августа 2011

Вы должны использовать гем "ffaker" для генерации адресов электронной почты и тому подобного в ваших спецификациях.Кроме того, вы должны наследовать поля от ранее определенных изготовителей, как показано ниже.

Fabricator(:user) do
 email      { Faker::Internet.email }
 name       { Faker::Name.name }
 roles_mask 1
 password   "secret"
 password_confirmation "secret"
 polco_groups {[Fabricate(:polco_group, :name => 'foreign', :type => :custom)]}
end

Fabricator(:admin, :from => :user) do
  roles_mask  5
end

Fabricator(:registered, :from => :user) do
  roles_mask 2
  polco_groups {[Fabricate(:polco_group, :name => 'AL', :type => :state),
          Fabricate(:polco_group, :name => 'AL01', :type => :district),
          Fabricate(:polco_group, :name => "Kirk\'s Kids" , :type => :custom)]}
end

Fabricator(:user1, :from => :registered)

Fabricator(:user2, :from => :registered) do
  polco_groups {[Fabricate(:polco_group, {:name => 'AL', :type => :state}),
          Fabricate(:polco_group, {:name => 'FL01', :type => :district}),
          Fabricate(:polco_group, {:name => "Ft. Sam Washington 1st Grade" , :type => :custom})]}
end

Это не связано с вашей проблемой, но похоже, что user1 и user2 должны быть просто вызовами Fabricate и фактически не определены какИзготовители.Я не рекомендую помещать столько явной информации в Fabricator.Вы должны только определить, что это необходимо для создания действительного объекта.Любые конкретные данные должны быть на службе конкретной спецификации.

...