该工厂女孩介绍描绘的区别FactoryGirl.build()
和FactoryGirl.create()
# Returns a User instance that's not saved
user = FactoryGirl.build(:user)
# Returns a saved User instance
user = FactoryGirl.create(:user)
我仍然不明白两者之间的实际差异。 有人可以举个例子,你可能需要使用一个,而不是其他? 谢谢!
该工厂女孩介绍描绘的区别FactoryGirl.build()
和FactoryGirl.create()
# Returns a User instance that's not saved
user = FactoryGirl.build(:user)
# Returns a saved User instance
user = FactoryGirl.create(:user)
我仍然不明白两者之间的实际差异。 有人可以举个例子,你可能需要使用一个,而不是其他? 谢谢!
在create()
而该方法仍然存在模型的实例build()
方法保持它只是在内存中。
就个人而言,我用的是create()
只有当持久真的是必要的,因为写DB使得测试费时的方法。
如
我创建用户的认证create()
因为我鉴定引擎查询数据库。
要检查模型有一个属性的build()
因为不需要DB访问方法就可以了。
it{Factory.build(:user).should respond_to(:name)}
“有,实际上建立一个例外‘创造’,当你建立关联,即你的公会是在内存中不再坚持,但牢记这一点。” - 奶昔
使用FactoryGirl.build(:factory_name)
不会坚持到数据库,并不会调用save!
,所以你的活动记录验证将不会运行。 这是更快,但验证可能是非常重要的。
使用FactoryGirl.create(:factory_name)
将持续到数据库并调用Active Record的验证。 这显然是速度较慢,但能赶上验证错误(如果你在测试中关心他们)。
FactoryGirl.create()
将创建新的对象和协会(如果工厂有什么)吧。 他们都将在数据库中保留。 此外,它会同时触发模型和数据库验证。 回调after(:build)
和after(:create)
的工厂被保存后会被调用。 此外before(:create)
将被保存在出厂之前调用。
FactoryGirl.build()
不会救一个对象,但仍然会要求一个数据库,如果工厂有关联。 这将触发验证只为关联对象。 回调after(:build)
工厂建成后,将被调用。
注意,在大多数情况下,当测试模型是最好用build_stubbed
获得更好的性能。 了解更多关于它在这里 。