2017-11-28 5 views
0

私はエンジンを持つアプリを持っています。このアプリの中で私はテストのためのダミーのアプリを作った。 my_engineに新しい移行を追加します。 次に、rails my_engine:install:migrationsを実行しているダミーアプリでこの新しい移行をインポートし、 'rake db:migrate'を実行します。ダミーのアプリケーションのデータ型エラー - 列が存在しません

したがって、両方のスキーマが同じに見えます。

は、しかし、私は私のテストを実行したとき、私は

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column my_table.new_field does not exist

を取得し、あなたのアイデアを持っていますか?

答えて

0

development環境では移行しただけで、test環境では移行していない可能性があります(テストテーブルにはありません)。

RAILS_ENV=testプレフィックス

1

と同じコマンドは、あなたのtest環境への移行を実行するためにRAILS_ENV=test rake db:migrateを実行してみてくださいください。

あなたは、あなたが、これは何あなたのrails_helper

https://relishapp.com/rspec/rspec-rails/docs/upgrade

ActiveRecord::Migration.maintain_test_schema!を追加することができます4.1以上のレールを使用している場合、あるいは、試験スキーマは 保留中の移行を持っているときだけではなく、調達ということです、 Railsはスキーマをロードしようとします。スキーマ がロードされた後に、保留中の移行が残っている場合にのみ、例外が発生します( )。

これを使用する際に注意すべきいくつかのcaveatesがあります

移行はまだ手動で実行する必要があります。これは「開発」環境でのみ実行する必要がありますが スキーマが初期化されていない場合は例外が発生します。例外は、rake db:migrateを実行する必要があることを示す指示を提供します。

これを追加すると、db:migrateを1回実行するだけで済みます。あなただけの中でdevelopment

関連する問題