当我通过rake运行任何rspec任务时,数据库似乎被删除并迁移,但如果我通过script / spec path / to / spec运行它们,它就不会。我可以设置一个选项,以便rake规范不会触及数据库吗?
答案 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)
之后测试运行没有失败。