即使指定了``vastion_test_schema!''',测试迁移并未使用我的铁轨引擎运行



我正在开发铁轨引擎(插件(。到目前为止,我有

  • 将RSPEC设置为框架
  • 添加了一个迁移以创建一个称为MyJob
  • 的模型/表
  • spec/models/my_job_spec.rb下添加了一些基本模型测试

轨道模板会自动创建一个spec/dummy应用程序,因此我进行了以下操作以运行测试

# Create the development and test DBs
rake db:create
# Copy migrations over to my dummy app
cd spec/dummy
rake my_app:install:migrations
cd ../..
# Run specs
rspec spec/models/my_job_spec.rb

但是,当我运行规格时,我会发现一个错误:

> rspec spec/models/
/Users/jeeves/.rvm/gems/ruby-2.2.2@gb/gems/activerecord-5.1.0/lib/active_record/migration.rb:576:in `check_pending!':  (ActiveRecord::PendingMigrationError)
Migrations are pending. To resolve this issue, run:
        bin/rails db:migrate RAILS_ENV=test

我认为这会自动发生,因为在我的rails_helper.rb中,我肯定有以下内容,这应该为我维护我的测试模式

ActiveRecord::Migration.maintain_test_schema!

它与插件或发动机的工作方式有所不同吗?

编辑:我尝试了运行bin/rails db:migrate RAILS_ENV=test的建议,然后在spec/dummy/内,然后重新运行rspec spec/。仍然没有运气。

OK找到了一些我做错了我对其他偶然发现的人做错的事情。

首先,我不需要在测试或开发时运行rake my_app:installations:migrations。显然,当我想将引擎的迁移将其迁移到主机应用程序中时,这仅适用于我应用程序的下游用户。在各种博客中的说明以及回想起来,但我仍然认为,如果您第一次试图弄清楚这很容易误解。

其次,所有命令都应从引擎的根部执行,而导轨可确保正确应用它们。因此,这只是从您的发动机根运行rake db:migrate的问题,并且虚拟应用程序将被迁移。

第三,我停止使用ActiveRecord::Migration.maintain_test_schema!。如上所述,它并没有真正正常工作。rake db:migrate RAILS_ENV=test正确地迁移了我的测试DB,但是由于嵌套虚拟应用程序的设置方式,maintain_test_schema!方法没有任何迁移。在这两个环境中都没有自动迁移,这很烦人,但我会接受。

因此,整个过程,最终非常简单,归结为:

# Create the development and test DBs
rake db:create
# Migrate
rake db:migrate
rake db:migrate RAILS_ENV=test
# Run specs
rspec spec/models/my_job_spec.rb

再次,回想起来很简单,但在途中学到了一些东西。

我在发动机上以最大的(不是Rspec(在Rails 3开发的发动机上遇到了类似的现象。

我要做的是:

  1. 我在某些工作目录(例如/tmp(下生成新引擎。
  2. 复制新创建的test/test_helper.rb到我当前的引擎。

删除ActiveRecord::Migration.maintain_test_schema!

替换为ActiveRecord::Migrator.migrate(Rails.root.join('db/migrate'))

最新更新