代码之家  ›  专栏  ›  技术社区  ›  AdamB

“rake spec”每次都会迁移数据库

  •  0
  • AdamB  · 技术社区  · 14 年前

    当我通过rake运行任何rspec任务时,数据库似乎会被删除和迁移,但是如果我通过script/spec path/to/spec运行它们,就不会了。是否有一个选项可以设置为rake spec不接触数据库?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Peter Brown    14 年前

    它不应该运行任何迁移,只将db/schema.rb导入测试数据库。这是预期的行为,因此测试在运行之前使用数据库架构的新副本。你不想让它刷新测试数据库的理由是什么?

        2
  •  1
  •   Cody Gray    14 年前

    从以下位置将rspec.rake复制到apps/lib/tasks文件夹:

    ~/.rvm/gems/ruby-1.8.7-p302/gems/rspec-rails-2.5.0/lib/rspec/rails/tasks/rspec.rake
    

    将此添加到文件顶部:

      Rake::TaskManager.class_eval do
        def remove_task(task_name)
          @tasks.delete(task_name.to_s)
        end
      end
      def remove_task(task_name) 
        Rake.application.remove_task(task_name) 
      end
      remove_task 'spec'
    

    查找并编辑此行以强制执行noop:

    spec_prereq = :noop #Rails.configuration.generators.options[:rails][:orm] == :active_record ?  "db:test:prepare" : :noop
    
        3
  •  0
  •   mthorley    11 年前

    从命令行运行rspec时,我也遇到了同样的问题。在我的案例中,我使用的是一个没有迁移的遗留数据库,因此测试将失败,因为迁移无法运行。

    ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
    

    在那之后,测试没有失败。