你能在FactoryGirl建造“一次性”工厂吗?

时间:2012-03-06 15:11:40

标签: ruby-on-rails rspec factory-bot

我想使用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 :(得分:0)

这很黑,但是:

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