在“测试”模式下处理数据库数据的最佳实践是什么?

3
我正在使用 Ruby on Rails 3.2.2、cucumber-rails-1.3.0、rspec-rails-2.8.1 和 capybara-1.1.2。我有 这个问题,但我开始思考可能是我做错了什么... 主要是关于在 test 数据库中播种数据以进行测试目的时如何正确管理数据。具体而言,我的问题与如何正确管理 test 数据库中的数据有关,因为我必须测试我的应用程序。
我的疑惑是:通过种植数据 (供您参考:我使用 ROOT_PATH/db/seed.rb 文件来注入那些数据) test 数据库中,我正在按照应该做的事情吗?也就是说,由于测试目的需要,我的应用程序需要这个数据库*中的数据才能正常工作,那么我应该如何填充 test 数据库呢?我应该填充 test 数据库吗?

在其他话中,如何处理测试模式下的数据库数据是最佳实践(在我的情况下)?一般来说,应该如何处理这种情况?
例如,为了使我的应用程序正常工作,至少需要与“匿名”用户、基本文章、基本文章类别等相关的数据。
2个回答

1

你应该使用以下之一:

  1. 固定数据。请参见相应的 Rails 文档
  2. 工厂。创建/管理工厂最流行的工具是 FactoryGirl。在我看来,这是最好的解决方案。
  3. 确保数据已经在测试数据库中种植。请参见 StackOverflow 问题。

(1), (2): 由于应用程序需要的数据在整个应用程序中都需要使用,例如使用Cucumber,我是否应该在所有/每个.feature文件/文件中声明/使用“背景”功能以加载工厂?这样做会不会太繁琐了?如果是,有什么可能的解决方案?(3):如果我遵循(1)-(2)的“方法”,我是否不应该在“测试”数据库中播种数据? - Backo
如果您遵循1、2方法,则不应该启动test数据库。如果有一些绝对需要的数据,您可能应该将其保留在Cucumber的Before钩子中,而不是背景中。 - p0deje

0

我有类似的问题,关联性使得必须有一些种子数据:

  • 工厂将使您的测试变得非常缓慢,对于单个对象来说它们完全可以,但对于需要为每个测试创建的大量种子数据则不行。

  • Fixture Builder - http://github.com/rdy/fixture_builder 我创建了一堆夹具(fixture)并从数据库中加载它们用于每个测试,将我的测试时间缩短了40%。你也可以加载种子文件。 但要小心,删除或更新记录会产生不必要的副作用。对这些规格(specs),请使用工厂。

  • Mock和Stub一切,以使您的测试很少接触到DB。 这已经非常不流行了,你最终会得到通过的规格(specs),但实际上忽略了你的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接