FactoryGirl的构build和创build方法有什么区别?
Factory Girl介绍描述了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()
方法,因为写入数据库会使testing耗时。
例如
我使用create()
创build用户身份validation,因为我的身份validation引擎查询数据库。
要检查模型是否具有build()
方法将执行的属性,因为不需要数据库访问权限。
it{Factory.build(:user).should respond_to(:name)}
更新
“当你build立联想时,实际上有一个”创造“的例外,也就是说,你的联想已经不在记忆中,而是一直存在下去。记住这一点” – Shakes
使用FactoryGirl.build(:factory_name)不会保存到数据库,也不会调用save !,所以您的ActiveRecordvalidation将不会运行。 这要快得多,但validation可能很重要。
使用FactoryGirl.create(:factory_name)将坚持到数据库并将调用ActiveRecordvalidation。 这显然比较慢,但可以捕获validation错误(如果您在testing中关心它们)。