我正在尝试建立一个运行 rspec 的可靠的持续集成服务器。我已经阅读了这个答案,并且确实如果我运行 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:load 再次,它从模式 rb 加载数据库......我已经完成了。而且,这让我特别不清楚为什么如果它要重新擦除数据库,如果没有应用迁移,它会中止。
更糟糕的是,在我的情况下,spec 任务所做的第一件事是保释,因为 users 表不存在......并且这是在 schema.rb 中定义的(此时已加载两次)。
我有什么误解吗?