68

On Rails 4.0.0.rc1, Ruby 2.0.0, after I run a migration, I see the following error when I try to run a test through rspec:

/Users/peeja/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.0.rc1/lib/active_record/migration.rb:376:in `check_pending!': Migrations are pending; run 'rake db:migrate RAILS_ENV=test' to resolve this issue. (ActiveRecord::PendingMigrationError)

That doesn't seem right. No one migrates their test database, do they? They db:test:prepare it, which—to be fair—I've forgotten to do. So I run rake db:test:prepare and run my rspec command again…and see the same error.

If I actually rake db:migrate RAILS_ENV=test, the error does in fact go away.

What's going on? Is this new in Rails 4?

4

6 回答 6

76

从 Rails 4.1 开始,这些rake db:test:*任务已被弃用。相反,您(test|spec)_helper.rb应该包括:

ActiveRecord::Migration.maintain_test_schema!

这意味着您的测试数据库将在每次运行测试时获得正确的模式,无论您是否从 Rake 任务运行它们。

于 2014-09-23T14:20:38.943 回答
31

看起来像rake test:prepare工作,不知道db:test:prepare现在做什么。

于 2013-06-21T12:36:20.813 回答
16

你也可以试试

rake db:migrate RAILS_ENV=test

它作为

db:test:prepare

做:)

于 2014-09-23T08:46:52.947 回答
11

当我只遵循一个人的答案时,有时我仍然很难解决这个问题,所以我将几个放在一起以获得更好的结果。这是我采取的步骤,不确定哪些是不必要的,但它最终有效。

  1. 添加ActiveRecord::Migration.maintain_test_schema!到 test_helper.rb 文件的顶部。
  2. rake test:prepare
  3. rake db:migrate
  4. rake db:migrate RAILS_ENV=test

然后,当我运行时,我bundle exec rake test每次都会得到干净的结果,没有待处理的迁移。(这是我第一次生成脚手架后所做的)。如果您确定绝对不需要其中一个步骤,请随时纠正我,但这是我确保它每次都能正常工作的方式。

于 2015-04-10T00:03:54.627 回答
2

我发现我在使用chruby管理我的 ruby​​ 版本时遇到了这个问题。Railsbin/rails db:test:prepare通过系统命令调用。这没有利用 chrubys $PATHenv var,因此无论系统 ruby​​ 是什么,它都会运行,并且通常会因为缺少 gem 而失败。不幸的是,我目前对此没有很好的解决方案。

于 2016-06-22T21:02:34.167 回答
-1

您可以尝试在命令之前设置变量,如下所示。这个声明解决了我的问题:

RAILS_ENV=test rake db:migrate
于 2016-09-15T16:07:27.717 回答