Именные чертежи с factory_girl - PullRequest
0 голосов
/ 06 мая 2010

Я использую Factory Girl, но мне нравится синтаксис машиниста. Поэтому мне интересно, есть ли способ создать именованный проект для класса, чтобы у меня было что-то вроде этого:

User.blueprint(:no_discount_user) do
  admin           false
  hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383"
  is_trader       false
  name            "foolish"
  salt            "21746899800.223524289203464"
end

User.blueprint(:discount_user) do
  admin           false
  hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383"
  is_trader       true
  name            "deadbeef"
  salt            "21746899800.223524289203464"
  discount_rate { DiscountRate.make(:rate => 20.00) }
end

DiscountRate.blueprint do
  rate {10}
  not_before ...
  not_after ...
end

Есть ли способ заставить factory_girl работать с таким синтаксисом? Я не нашел ни одного. Помощь приветствуется.

Спасибо заранее Jason

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Если вас беспокоит СУХОСТЬ ваших тестов, вы можете рассмотреть созданный мной плагин active_factory В нем вы можете определить фабрику следующим образом:

factory :discount_user, :class => User do
  admin           false
  hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383"
  is_trader       true
  name            "deadbeef"
  salt            "21746899800.223524289203464"
  discount_rate { DiscountRate.make(:rate => 20.00) }
end

Другой вариант - добавить скидку внутри теста:

models { discount_rate - user - ... }

Это создаст связь между двумя моделями. Таким образом, вы можете сохранить свои характеристики СУХИМ, избегая при этом создания большого количества фабрик.

Извините, если я не отвечаю точно на ваш вопрос

0 голосов
/ 06 мая 2010

Да, вы можете. требуется синтаксис проекта

  require 'factory_girl/syntax/blueprint'
  Sham.email {|n| "#{n}@example.com" }

  User.blueprint do
    name  { 'Billy Bob' }
    email { Sham.email }
  end

  User.make(:name => 'Johnny')
...