Rails 固定装置与种子

Posted

技术标签:

【中文标题】Rails 固定装置与种子【英文标题】:Rails fixtures vs seeds 【发布时间】:2015-05-22 04:23:21 【问题描述】:

我正在学习 Ruby on Rails,我想确保我了解固定装置和种子数据之间的区别。

我的理解是,fixture 基本上是您运行测试断言的测试数据,并且一旦您的测试完成就没有持久性,而当您执行rake db:seed 之类的操作时,您会自动将种子放入数据库中。

为什么在这种情况下使用种子?只是为了避免写出所有无数的测试断言?对于您知道应用程序投入生产时需要在数据库中的数据?

(我猜,像留言板上的第一个管理员一样一直存在的静态数据?)

【问题讨论】:

【参考方案1】:

许多应用需要一些数据才能正常运行。例如,国家和邮政编码列表。或者,用户可以担任的潜在角色列表,即使数据库中还没有用户。

从启动和运行开发环境所需的内容来考虑种子数据。一般来说,对于一个新的 Rails 开发人员来说,开发任何应用程序的过程都应该是这样的:

    克隆回购 通过 bundler 安装 gems 创建并为开发和测试数据库播种 运行测试,应该会通过

【讨论】:

不要为您的测试数据库播种。 ***.com/a/25819011/1949363 是另一个简洁的答案 @maletor 为什么不呢?如果我在代码中有一些特定于种子的逻辑,那么用相同的固定装置复制现有的种子数据有什么意义?维护 2 个副本似乎更难。 因为存根更快更具体。【参考方案2】:

你没看错。种子数据是用允许应用从一开始就可用所需的先决条件数据填充数据库,例如添加一个默认管理员帐户,这是应用从一开始就可管理所必需的。

种子数据不应用于测试目的,在测试时,您应始终确保数据库是干净的,以便您知道示例使用的唯一数据是示例填充的数据,而不是来自外部的任何地方,这样可以避免混淆。

fixtures 是这样做的一种方式。但更好的方法是使用像 factory girl 这样的工厂,查看此 railscast episode 以获得更好的解释。

【讨论】:

一个很好的答案,但我不会这么快打折灯具。最新版本运行良好。首先尝试固定装置。如果他们不做你想做的事,那就寻找像工厂女孩这样的替代品。 见brandonhilkert.com/blog/…

以上是关于Rails 固定装置与种子的主要内容,如果未能解决你的问题,请参考以下文章

不使用固定装置的 Django 1.10 种子数据库

使用 Rails 和 Devise 进行功能测试。在我的固定装置里放啥?

ruby on rails 固定装置中的自动关联

不同阶段有不同的 initial_data 固定装置(测试与生产)

pytest 固定装置在一个单独的目录中

清空桌子并装满固定装置