all*_*ire 8 ruby-on-rails factory-bot
当你可以在测试中简单地使用ActiveRecord来创建数据库条目时,工厂/固定装置的目的是什么(我知道工厂就像固定装置一样,但更清晰一点)?即News.create(...)
我只是没有看到使用Factory Girl的任何优势,而不是简单地使用ActiveRecord方法创建一个新用户说新用户..
谢谢
拥有工厂并遵循测试数据构建模式将使您预先做一些工作,但确实会节省您未来的时间和工作。
假设您有一个汽车型号,该汽车有一个车主,并且该车主需要一个地址。而且每个都有其他领域。如果您想遵循直接使用模型的方法,则必须在需要它们的每个步骤定义中创建这些对象(以及相应的关系)。与工厂?您只需定义一次。
一旦你在一个地方定义了工厂及其相应的结构,你所要做的就是请求一个汽车,工厂将承担与其他模型的所有依赖关系。这不是很酷吗?最后,您希望此时专注于测试。
它也非常酷的是,您可以覆盖特定的属性,因此,如果您想覆盖属性速度,您可能有这样的东西:
Given /^I have a car running^/
Factory :car, speed => 100
end
Run Code Online (Sandbox Code Playgroud)
从我卑微的角度来看,我喜欢 Factory Girl,因为它使我的测试代码易于维护并且非常易于阅读。
创建/构建一个对象,然后只在测试中调用它时才使用它.
您可以在一个文件中定义对象的"快乐路径"(包括关联)(如ryan所述),然后在架构/模型关联更改时保留一个文件.
模拟数据库对于单个记录应该是什么样的,将其加载到测试数据库中然后使用.
夹具是模型的最终状态并存在于数据库中,因此加载一次,并且可以在您认为合适的测试中使用.
多个文件,您可以布置夹具文件,以便处理每个文件和关联.
创建一次并在一次测试中或在一个before(:each)块中使用一次
如果你有100个这样的块,那就是编写和维护100个不同的对象,更不用说协会了@user.profile.create(....)100次.
一个文件要维护,而不是在我们的代码行中使用多个build或替换create.
注意
必须说在我的测试套件中我希望它尽可能快,所以我放弃FactoryGirl并使用Fixtures和NewModel.create向前移动.只是为了看它是否加快了速度.我正在对FG减慢我的套房首付理论,因为是let()和before(:each)
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |