【问题标题】:How do I run Rails integration tests without dropping DB contents?如何在不删除数据库内容的情况下运行 Rails 集成测试?
【发布时间】:2009-01-11 21:17:16
【问题描述】:

我已经编写了一些集成测试,我希望在投入生产之前针对我的 prod 数据库的副本运行这些测试。这让我可以测试我的所有路线是否仍然正确,所有页面都没有错误地呈现,并且一些多页面工作流程按预期工作。

当我运行集成测试时,它会删除我已加载的数据库并加载测试装置(如预期的那样)。如何更改此行为并保留已加载的生产数据库副本?

【问题讨论】:

    标签: ruby-on-rails unit-testing integration-testing


    【解决方案1】:

    集成测试调用 db:test:prepare 调用 db:test:clone_structure 调用 db:structure:dump 和 db:test:purge

    您可以编写自己的任务

    namespace :your_namespace do
      Rake::TestTask.new(:integration => "db:migrate(if you want") do |t|
        t.libs << "test"
        t.pattern = 'test/integration/**/*_test.rb'
        t.verbose = true
      end
    end
    

    【讨论】:

    • 请参阅上面的更新 - 恐怕我的任务仍然存在相同的行为
    • 奇怪,它对我有用。您正在运行您的新任务“rake dbtest:integration”吗?
    • 是的 - 我也尝试将它重命名为“集成”,以确保它不会在测试命名空间中的集成任务中表现异常。
    • 'rake dbtest:integration --trace' 是什么意思?
    • 已修复。我的 test_helper.rb 中有一个固定装置 :all 。我现在创建了一个没有该行的 integration_test_helper 并且已修复它。谢谢!
    【解决方案2】:

    为了让它工作,我必须在调用 rake 任务时指定环境,否则它将在开发数据库上运行迁移,然后在测试数据库上运行测试;给出上面的例子

    namespace :dbtest do
      Rake::TestTask.new(:integration => "db:migrate") do |t|
        ...
    

    我不得不像这样执行测试

    rake environment RAILS_ENV=test dbtest:integration
    

    【讨论】:

      【解决方案3】:

      如果您不想在每次测试执行之间重新加载生产副本,那么在集成测试中设置 self.use_transactional_fixtures = true 也会很有用。

      否则,集成测试运行将使用它所做的任何更改来破坏数据。

      【讨论】:

        【解决方案4】:

        我需要添加 aivarsak 的 Rake 任务

        namespace :dbtest do  
          Rake::TestTask.new(:integration) do |t|
            t.libs << "test"
            t.pattern = 'test/integration/**/*_test.rb'
            t.verbose = true  
          end
        end
        

        并删除

        fixtures :all
        

        test/test_helper.rb 文件中的行(或创建一个您在集成测试文件中引用的新行)

        【讨论】:

          猜你喜欢
          • 2011-04-15
          • 2020-02-01
          • 2012-04-03
          • 2011-08-20
          • 1970-01-01
          • 2023-01-09
          • 2011-02-01
          • 2012-11-01
          • 1970-01-01
          相关资源
          最近更新 更多