在测试 Rails 时,我们需要准备测试数据,在这方面比较主流的工具有两种:
Fixture
Rails 默认方式
Thoughtbot 公司开发的一套工具
一图胜千言,制作了两张流程图,以此表述 Fixture 与 Factory Girl 在准备测试数据的方式差异。
Fixture 是如何准备测试数据的呢?
可真实世界中,Rails 的流程更多是这个样子:
两者大相径庭,Fixture 无法很好的测试 ActiveRecord 中的回调(callback)。
如果要实现回调函数,需要在 Fixutre 中插入一堆代码。这太没有美感了,有洁癖的程序员都不会干这种事情。
此外,在 Fixture 中维护两个对象之间的关系也是一件很费劲的事情。我们要在 YAML 文件中根据 id 创建关系,一不小心就会把自己绕进去。假如存在 User、Topic 两个类,他们之间的关系如此:
# topic belongs_to :user # user has_many :topics # 稍候补上代码
Factory Girl 的准备方式与真实世界更相似。
打理对象之间的关系十分方便
peter = create :user
topic = create(:topic, user_id: peter) #测试时创建关系,更加flexible
她还有很多很实用的功能,比如继承、特征等等,请参考官方文档。