我想使用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
超出范围,就不能再引用它了,因此不存在使用未使用的工厂污染对象空间的危险。 (如果我想要一个仅用于特定测试的一次性工厂,我不希望它暴露在我的其余测试中。这很邋。。)
这可能吗?如果没有,是否有一颗宝石可以让我做同等的事情?
答案 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