【问题标题】:How to keep data when run test in rails在 Rails 中运行测试时如何保留数据
【发布时间】:2010-11-12 14:31:24
【问题描述】:

每次我运行测试。 Rails 将从表中删除我的数据。我的表中有数百万条记录用于测试搜索性能和纠正。我无法在每次运行测试时添加数据。

运行测试时如何告诉rails“请不要删除此表中的数据”。

ps.

我找到了这个链接

How do I run Rails integration tests without dropping DB contents?

这可能与我的问题有关,但我不知道在我的 rails 项目中将他的代码放在哪里。

【问题讨论】:

    标签: ruby-on-rails testing


    【解决方案1】:

    与 neokain 之前的帖子非常相似,但是,他并没有为我在 Rails 3 上工作。 我继续将其放入应用程序根目录的 Rakefile 中,当我运行 test:units 时,它并没有吹走我所有现有的表:

    Rake::TaskManager.class_eval do
      def delete_task(task_name)
        @tasks.delete(task_name.to_s)
      end
      Rake.application.delete_task("db:test:purge")
      Rake.application.delete_task("db:test:prepare")
    end
    
    namespace :db do
      namespace :test do
        task :purge do
        end
        task :prepare do
        end
      end
    end
    

    【讨论】:

    • 哎呀。我忘记了 rake 规范是这样做的……对于其他谷歌用户,我在运行 rake 规范同时还使用 database_cleaner 时也出现了这种情况。它正在吹走我认为我已经用 db 清洁器正确掩盖的种子数据,因此 IT 不会把它吹走。但是这种方法效果很好。有时“rails 很有帮助”真的是一个痛苦,呃,rails...
    【解决方案2】:

    在 Rails 4 中,我最终得到以下结果

    # lib/tasts/test.rake
    # Do not drop database for tests
    if ENV['RAILS_ENV'] == 'test'
      Rake::TaskManager.class_eval do
        def delete_task(task_name)
          @tasks.delete(task_name.to_s)
        end
      end
    
      Rake.application.delete_task("db:test:load")
    
      namespace :db do
        namespace :test do
          task :load do
          end
        end
      end
    end
    

    【讨论】:

      【解决方案3】:

      “rake 测试”任务始终运行 db:test:prepare,它将重新创建您的数据库。

      你可以在 lib/tasks 的某处添加它:

      if ENV['NO_DB']
        namespace :db do
          namespace :test do
            task :prepare do
            end
          end
        end
      end
      

      然后运行NO_DB=1 rake test。此外,当您使用自动测试而不是 rake 任务时,数据库不会更改。

      【讨论】:

        【解决方案4】:

        我尝试允许第一个答案但不工作。

        我搜索并找到了这个www.pervasivecode.com,然后我修改了第一个答案的代码,如下所示:

        if ENV['NO_DB']
          Rake::TaskManager.class_eval do
            def delete_task(task_name)
              @tasks.delete(task_name.to_s)
            end
            Rake.application.delete_task("db:test:purge")
          end
        
          namespace :db do
           namespace :test do
            task :prepare do
            end
           end
          end
        end
        

        然后运行命令 test allow first answer。数据库测试不掉线。

        【讨论】:

          猜你喜欢
          • 2011-06-04
          • 1970-01-01
          • 1970-01-01
          • 2015-08-10
          • 2017-01-21
          • 1970-01-01
          • 1970-01-01
          • 2011-09-23
          • 1970-01-01
          相关资源
          最近更新 更多