2010-11-10 51 views
0

当我通过rake运行任何rspec任务时,数据库似乎被删除和迁移,但是如果我通过script/spec path/to/spec运行它们,它不会'吨。有没有我可以设置的选项,以便rake规格不会触及数据库?“rake spec”每次都迁移数据库

回答

1

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

+0

有没有办法禁用?无论出于何种原因,该项目的开发人员决定不使用rails migrations来管理数据库,因此导入schema.rb不是有效的选项。 – AdamB 2010-11-10 04:06:55

+0

如果您有rspec.rake任务,请查找包含db:test的行:准备并注释掉它。这应该防止它尝试加载模式。没有模式,你打算如何构建测试数据库? – 2010-11-10 04:40:01

+0

这个伎俩,谢谢! – AdamB 2010-11-10 18:34:19

1

对于我所做的事我想永久关闭它。所以使用RSpec 2.5.0和轨道3:

复制rspec.rake到您的应用程序/ lib目录/文件夹任务从:

~/.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' 

查找和编辑此行强制空操作:

spec_prereq = :noop #Rails.configuration.generators.options[:rails][:orm] == :active_record ? "db:test:prepare" : :noop 
0

我在命令行中运行rspec的时候也有过同样的问题。在我的情况下,我正在处理一个没有迁移的遗留数据库,所以测试会失败,因为迁移无法运行。

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

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

之后的测试运行,没有失败。