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

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

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

对于我的工作,我永远想要它。 所以使用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 

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

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

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

之后测试运行没有失败。