Можете ли вы построить «одноразовые» фабрики в FactoryGirl? - PullRequest
2 голосов
/ 06 марта 2012

Я бы хотел использовать FactoryGirl для создания одноразовых фабрик. То есть Фабрика больше не существует, как только она выходит из сферы применения.

Большинство фабрик определяется примерно так:

Factory.define(:user) do
  first_name "James"
  last_name  "Smith"
end

u = Factory.build(:user)

Но если сделать это таким образом, значит FactoryGirl навсегда сохранит ссылку на фабрику :user Независимо от того, где вы находитесь, Factory.build(:user) означает тот, который вы определили ранее. Я хочу что-то вроде этого:

f = Factory.temporary(:user) do
  first_name "David"
  last_name  "Jones"
end

u = f.build

Как только f выходит из области видимости, вы больше не можете ссылаться на него, поэтому не будет опасности загрязнения пространства вашего объекта фабриками, которые не используются. (Если я хочу, чтобы одноразовая фабрика использовалась только в определенном тесте, я не хочу, чтобы он подвергался воздействию остальных моих тестов. Это небрежно.)

Это возможно? Если нет, то есть ли драгоценный камень, который позволит мне сделать что-то эквивалентное?

1 Ответ

0 голосов
/ 06 марта 2012

Это глупо, но:

module FactoryGirl
  class Registry
    def remove(name)
      @items[name.to_sym] = nil
    end
  end
end

before do
  Factory(:my_user, :parent => :user) do |f|
    f.first_name "David"
  end
end

after do
  FactoryGirl.factories.remove(:my_user)
end
...