我正在尝试建立一个运行rspec的可靠的持续集成服务器。我已经阅读了this answer,的确如果我运行db:reset,这似乎让我处于良好状态以运行测试。事实上,如果我运行db:reset然后运行它,在cli上运行rake spec - 我的测试运行。
但是,如果我做一个同时完成两个工作的rake任务,就像这样:
desc 'Run all tests, used by Jenkins CI'
task :run => [ 'db:reset' ] do
Rake::Task["spec"].invoke
end
当测试运行时,数据库为空。这似乎是因为rake:spec调用以下内容:
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load
** Execute spec
如果我正确读取它,如果有待处理的迁移,它将(第2行)中止。然后,最终db:schema:再次加载,从架构rb加载数据库...我已经完成了。并且,这让我特别不清楚为什么,如果要重新擦除数据库,如果不应用迁移,它将会中止。
更糟糕的是,在我的情况下,spec任务所做的第一件事就是保释,因为users表不存在......而且是在schema.rb中定义的(此时已经加载了两次)。
我误解的任何想法?