gpt4 book ai didi

ruby-on-rails - 使用 Factory Girl 进行测试时处理数据库的正确方法

转载 作者:行者123 更新时间:2023-11-28 20:24:36 26 4
gpt4 key购买 nike

我正在尝试将一个使用 Fixtures 的 Rails 3 应用程序移到 Factory Girl 上,但我并不完全确定数据库的正确方法。 (请注意,我正在使用 Rspec 进行测试)。

我有一个 seeds.db,其中包含我的功能和集成测试所需的数据,但是当涉及到我的角色的模型测试时模型,如果我想从工厂创建一个管理员角色,这个种子数据可能会妨碍,但我的种子数据库中已经有一个管理员角色,并且名称列必须是唯一的。此外,我在这些模型测试中创建的任何数据都可能会干扰我的集成测试,因为我会有我不期望的额外数据。

我想有几个问题:

  1. 在单元测试中处理数据库的正确方法是什么?我需要其他测试的种子数据,但它们现在似乎正在“妨碍”。我是被迫使用序列制作唯一数据,还是有一种方法可以加载种子数据以进行功能和集成测试等?

  2. 是否有适当的方法来清除工厂数据,使其仅作为功能和集成测试的种子数据?

现在完全是 Factory Girl 的新手,只想正确地学习它而不是通过黑客攻击。感谢您的任何输入。

最佳答案

在测试中处理数据库数据的“正确”方法是在运行每个测试之前确保它是干净和一致的。很多人(包括我自己)从来没有为数据库播种而是使用工厂。

为数据库设置种子也会让您更难了解正在发生的事情,并且会导致您做出很多次最终都是错误的假设。相反,使用工厂只添加测试所需的数据。这是一些额外的工作,但它是值得的,因为:

  1. 消除你的假设
  2. 确保清洁和一致的测试环境
  3. 在测试中保留所有测试数据

此外,rspec 具有 before(:each)before(:all),因此您可以在运行测试之前设置数据。所以没有那么多额外的工作。

但一开始可能会让您感到困惑的是,当使用 before(:all) 时,rspec 不会在测试运行之间清除数据库。为此,我通常只是在 after(:all) block 。所以我使用的经验法则是 - 在 before(:all) 中创建的任何内容都应该在 after(:all)

中删除

许多人也使用 database_cleaner gem 为此,但到目前为止我还不需要它。

关于ruby-on-rails - 使用 Factory Girl 进行测试时处理数据库的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com