The Factory Girl introduction描述了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()方法可以,因为不需要数据库访问.

it{Factory.build(:user).should respond_to(:name)}

使现代化

"有一个例外是,当你建立关联时,build实际上是‘创建’的,也就是说,你的关联不再存在于记忆中,而是持久存在.记住这一点"–Shakes

Ruby相关问答推荐

有没有办法保存 ruby​​ 代码的执行,以便稍后使用逐步重播对其进行调试?

如何在 Ruby 中为链表实现#pop

每秒做某事 x 次

令人惊讶的有效 Ruby 语法:% 无处不在

Ruby ERB 类给出未定义的局部变量或方法,但 erb 解析良好

带有索引的 Ruby `each_with_object`

如何在 ruby​​ 中编写负循环,例如 for(i=index; i >= 0; i --)

模块中的实例变量?

如何使用 RVM 重新编译 ruby​​?

如何从最后一个元素开始遍历数组?

RSpec:我如何在期望语法中使用数组包含匹配器

如何强制 Ruby 字符串为 n 个字符

用 Ruby 解析 XML

如何将哈希键转换为方法名称?

Lisp 和 Erlang 原子、Ruby 和 Scheme 符号.它们有多大用处?

Xcode - 配置:错误:在 $PATH 中找不到可接受的 C 编译器

为什么 Ruby 文档中的方法前面有一个井号?

Ruby 中的 each 和 collect 方法有什么不同

我更改存储库 URL 后 Capistrano 部署失败

为什么 Ruby setter 需要self .班级内的资格?