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

时间:2010-11-10 00:17:31

标签: ruby-on-rails rspec

当我通过rake运行任何rspec任务时,数据库似乎被删除并迁移,但如果我通过script / spec path / to / spec运行它们,它就不会。我可以设置一个选项,以便rake规范不会触及数据库吗?

3 个答案:

答案 0 :(得分:1)

它不应该运行任何迁移,只是将db / schema.rb导入到测试数据库中。这是预期的行为,因此您的测试在运行之前使用数据库模式的新副本。你不希望它刷新测试数据库的原因是什么?

答案 1 :(得分:1)

对于我的所作所为,我永远想要它。所以使用rspec 2.5.0和rails 3:

将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

答案 2 :(得分:0)

从命令行运行rspec时我也遇到了同样的问题。在我的情况下,我正在使用没有迁移的遗留数据库,因此测试会失败,因为迁移无法运行。

解决方案是编辑spec / spec_helper.rb文件并删除以下行:

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

之后测试运行没有失败。