Ruby 工厂女孩-什么';目的是什么?

Ruby 工厂女孩-什么';目的是什么?,ruby,factory-bot,Ruby,Factory Bot,当我可以在(:each)块之前使用时,在rspec测试中使用Factory Girl的目的是什么?感觉Factory Girl和(:each)之前的之间的唯一区别是工厂在测试之外准备对象创建。这是对的吗?FactoryGirl在测试中替换夹具。这样,您就不必在更改数据模型时使装置保持最新。当您添加更多边缘案例时,装置也可能变得笨拙 FactoryGirl动态生成数据,添加和删除字段更容易。此外,您还可以在设置中使用它,了解如何使用设备 这会让它更清晰吗?Gems喜欢并允许您为有效和可重用的对象创

当我可以在(:each)块之前使用
时,在rspec测试中使用Factory Girl的目的是什么?感觉Factory Girl和(:each)
之前的
之间的唯一区别是工厂在测试之外准备对象创建。这是对的吗?

FactoryGirl在测试中替换夹具。这样,您就不必在更改数据模型时使装置保持最新。当您添加更多边缘案例时,装置也可能变得笨拙

FactoryGirl动态生成数据,添加和删除字段更容易。此外,您还可以在设置中使用它,了解如何使用设备

这会让它更清晰吗?

Gems喜欢并允许您为有效和可重用的对象创建模板。它们是为了响应fixture而创建的,fixture固定了必须加载到数据库中的记录。它们允许在实例化对象时进行更多自定义,目的是确保您有一个有效的对象来处理。它们可以在测试中的任何地方以及测试前后挂钩中使用

before(:each)、before(:all)、after(:each)和after(:all)都旨在为您提供一个可以在测试组中共享的安装和拆卸位置。例如,如果您要为每个测试创建一个新的有效用户,那么您将希望在before(:each)钩子中这样做。如果您要从文件系统中清除一些文件,您需要在一个before钩子中完成这项工作。如果您的所有测试都创建了一个tmp文件,并且您希望在测试之后删除它,那么您将在after(:each)或after(:all)钩子中执行该操作


这两个概念的不同之处在于,工厂的目标不是围绕测试创建挂钩,而是创建有效的Ruby对象和记录,这样您就可以保持对象创建的灵活性和干爽性。前后挂钩针对示例组中共享的安装和拆卸任务,这样您就可以保持安装和拆卸代码干燥。

此外,夹具定义在整个应用程序中都是全局的。工厂可以是本地的,因此特定于独立测试用例的数据位于特定上下文的设置中,而不是单个全局文件中


如果你想要更多的阅读材料,我会很好地介绍这个主题。

我花了一段时间才明白工厂是固定装置的“智能”替代品。我仍然有兴趣进一步了解mock和stub之间的区别。确实如此,谢谢。:)很高兴知道它们是固定装置的良好替代品。这有点奇怪,因为Hartl教程(顺便说一句,很好)在Fixture和Factory girl之间进进出出。这让我感到困惑。现在我知道了,我可能会更经常地使用它另一种说法是:FactoryGirl工厂就像一个
给我一个有效的模型
函数。如果您需要在多个
before:each
块中使用该功能,它可以为您节省一些重复。设置有效模型(关联、确保唯一值等)越复杂,就越能节省您的精力。这就是FactoryGirl与ActiveReccord答案交互的方式,这里的答案似乎过时且怪异。