2
我想用FactoryGirl创建一次性工厂。也就是说,工厂一旦超出范围就不再存在。您可以在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
超出范围,就不能引用它了,所以就没有跟工厂污染的物体空间的危险,不用过的。 (如果我想要一个只在特定测试中使用的一次性工厂,我不希望它暴露给我的其余测试。这是sl。。)
这可能吗?如果没有,是否有一颗宝石可以让我做同样的事情?
为什么不只是覆盖与你想要的属性,用户的工厂? 'Factory.build:user,:first_name =>'David',:last_name =>'Jones'' – James 2012-03-06 16:34:55
@James因为这需要在我可以做任何事情之前加载我所有的工厂,而且几乎所有这些工厂对于给出测试。这是不好的隔离和它的马虎测试。 “如果你想从头开始制作一个苹果派,你必须先创建宇宙”是一个不错的Carl Sagan报价,但它不适用于编写单元测试。 – 2012-03-06 17:41:53
如果你想要一次性的工厂进行特定的测试,我的猜测是工厂不是正确的模式,并且你最好用类似'let(:user){User.new(:first_name =>) 'David',:last_name =>'TooSoon')}'或者只是嘲笑+存根。 – 2012-03-06 17:48:29