工厂女孩 – 目的是什么?

当我before(:each)使用before(:each)块时,rspectesting中Factory Girl的目的是什么? 感觉就像Factory Girl和a before(:each)唯一的不同之处就是工厂在testing之外准备对象创build。 这是正确的吗?

诸如Factory Girl和Sham之类的gem允许您为有效和可重用的对象创build模板。 它们是根据固定logging必须装入数据库的固定装置而创build的。 它们允许在实例化对象时进行更多的自定义,并且旨在确保您有一个有效的对象来处理。 它们可以在testing中的任何地方使用,也可以在testing钩之前和之后使用。

之前(:每个),之前(:所有),之后(:之后)和之后(之所有)都旨在给你一个地方做安装和拆卸,将在testing组之间共享。 例如,如果您要为每个testing创build一个新的有效用户,那么您需要在before(:each)钩子中执行此操作。 如果你打算从文件系统中清除一些文件,你希望在hook之前做到这一点。 如果你的testing都创build了一个tmp文件,并且你想在testing之后删除它,那么你会在你的after(:each)或者之后(:all)钩子中做这个。

这两个概念的不同之处在于,工厂并不是围绕着testing创build钩子,而是旨在创build有效的Ruby对象和logging,以便保持对象的创build灵活和干爽。 钩子之前和之后的目标是在示例组中共享的设置和拆卸任务,以便您可以保持设置和拆卸代码的干爽。

FactoryGirl将replacetesting中的灯具。 这样,当您更改数据模型时,您不必将灯具保持在最新状态。 在添加更多边缘情况下,灯具也可能变得笨重。

FactoryGirl随时生成数据,添加和删除字段要容易得多。 另外,你可以在设置中使用它,你将如何使用灯具。

这是否更清楚?

夹具定义在整个应用程序中也是全局的。 工厂可以是本地的 – 所以特定于独立testing用例的数据是针对该特定上下文的设置,而不是在单个全局固件文件中。

如果你想要更多的阅读材料, 这本书很好地涵盖了这个主题