【问题标题】:What are best practices to handle database data in 'test' mode?在“测试”模式下处理数据库数据的最佳实践是什么?
【发布时间】:2012-03-19 11:28:52
【问题描述】:

我正在使用 Ruby on Rails 3.2.2、cucumber-rails-1.3.0、rspec-rails-2.8.1 和 capybara-1.1.2。我有this problem,但我开始想也许我做错了什么……主要是为了测试目的在test 数据库中播种数据。具体来说,我的问题与当我必须测试我的应用程序时如何正确管理 test 数据库中的数据有关。

我的疑问是:通过播种数据仅供参考:我使用ROOT_PATH/db/seed.rb 文件来注入该数据)test 数据库中我正在做他们应该做的事情?也就是说,我应该如何填充 test 数据库,因为需要该数据库中的数据*才能使我的应用程序正常工作以进行测试目的?我应该填充test数据库吗?

换句话说,test模式下处理数据库数据的最佳做法是什么(在我的情况下)而且,一般来说,情况应该如何处理?

***** 例如,为了工作,我的应用程序至少需要与“匿名”用户、“基本”文章、“基本”文章类别等相关的数据。

【问题讨论】:

    标签: ruby-on-rails ruby database ruby-on-rails-3 testing


    【解决方案1】:

    您应该使用以下方法之一:

    1. 固定装置。见对应Rails documentation
    2. 工厂。最流行的创建/管理工厂的工具是FactoryGirl。恕我直言,这是最好的解决方案。
    3. 确保将数据播种到测试数据库中。请参阅this StackOverflow 问题。

    【讨论】:

    • (1), (2):由于在整个应用程序中都需要使应用程序正常工作所需的数据,因此我是否应该(例如使用 Cucumber)声明/使用Background 所有/每个 .feature 文件/文件中的“功能”以便加载 工厂?做起来是不是太乏味了?如果是这样,有什么可能的解决方案? (3):如果我遵循(1)-(2)“方法”,我不应该在test数据库中播种数据吗?
    • 如果您遵循 1、2 方法,那么您不应该播种 test 数据库。如果有一些绝对需要的数据,你应该把它放在黄瓜的Before 钩子而不是背景中。
    【解决方案2】:

    我也遇到过类似的问题,联想需要一些种子数据:

    • 工厂会让你的测试变得非常慢,它们对于单个对象来说是完全可以的,但对于必须为每个测试创建的大量种子数据来说却不是

    • 夹具生成器 - http://github.com/rdy/fixture_builder 我创建了一堆固定装置,并为每个测试从数据库中加载它们,将我的测试时间减少了 40%。您也可以改为加载种子文件。 但要小心,删除或更新记录会产生不必要的副作用。为这些规范使用工厂。

    • 模拟和存根所有内容,以便您的测试很少接触数据库。 这已经变得非常不受欢迎,您最终会获得通过规范,这些规范不会反映您的实际错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 2011-03-16
      • 2010-09-11
      相关资源
      最近更新 更多