在我的单元测试中夹具和工厂之间有什么区别?

时间:2011-10-16 18:03:33

标签: ruby-on-rails rspec factory-bot

这里有点困惑,工厂和灯具有什么区别?

所以我正在使用工厂女孩,当我使用工厂创建一个对象时,它是否应该持久保存到db?或者这就是固定装置,数据通过模型等持久存储到数据库中。

或者这些完全不相关:)

3 个答案:

答案 0 :(得分:9)

真正简短的回答是,在Rails灯具和Factory Girl工厂之间概念上存在 no 差异。这只是完成同样事情的不同语法。

然而,这令人困惑,因为一般测试/编码概念的术语已被Rails / Ruby世界中的各个项目所采用。一般来说:

基本上在Rails中,Fixtures和Factories(由Factory Girl定义)只是创建对象的方法。您应该使用它们来创建测试夹具或测试的设置状态。令人困惑的部分是您可以使用多个Rails“Fixtures”来创建单个测试的Fixture(基线)。

Factory Girl本身是Object Mother模式的一种实现,描述了一种使用角色创建测试夹具设置的方法。

答案 1 :(得分:1)

他们习惯于实现相同的目标,用数据填充数据库以供测试。

灯具比工厂快,因为它们不使用验证或任何模型的逻辑,但很难维护,缺乏验证可能会破坏您的测试。

对于工厂,您需要以速度为代价在数据库中拥有有意义(且有效)的内容。

还有其他解决方案,比如fixture_builder,可让您使用工厂定义灯具;)工厂只运行一次,然后转换为灯具。 https://github.com/rdy/fixture_builder

答案 2 :(得分:0)

例如,使用factory_girl的工厂只是构建具有预定义值的对象的意思。它不需要您将它们插入任何类型的持久存储中。构建复杂对象非常方便。 factory_girl显然有很多功能,但这是我看到它的主要目标。

注意:我在这里只回答了问题的一半,因为我对夹具不是很熟悉...... 我在这里扔了2美分。希望这会有所帮助。