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中关心它们)。