djangoの移行(django v1.7 +)を使用してデータベースを変更しました。 データベースに存在するデータは無効です。Djangoデータベースの移行をunittestする方法は?
基本的には、ユニットテストの中で、移行前のデータベースを構築し、データを追加し、移行を適用し、すべてがスムーズに行われたことを確認したいと思います。
どのようにしない:unittestの
をロードする際
が新しい移行を控える私は
settings.MIGRATION_MODULES
をオーバーライドについてsome stuffが見つかりましたが、それを使用する方法を考え出すことができませんでした。私がexecutor.loader.applied_migrations
を調べると、まだすべてがリストされています。私が新しい移行を防ぐ唯一の方法は、ファイルを実際に削除することでした。私が使用できる解決策ではありません。我々は、これは非常に簡単である必要があり、移行を防ぐことができる場合(旧モデルを使用して)unittestのデータベースに
をレコードを作成します。
myModel.object.create(...)
はは、私はおそらく私が見つけたことを、今、これをうまくすることができると思うの移行を適用test_executor:計画移行ファイルを指して、それを実行に設定されていますか?ええ、そうですか?ちょうど移行前に作成されたインスタンスを取得し、それを確認します。データベース内の古いデータは、今、私はこれはかなり簡単なはず期待して、再び新しいモデル
に一致する:-Dのための任意のコード
確認を得ましたすべての正しい方法で変更されています。
だから、挑戦は本当にただ、最新の移行スクリプトを塗布した後、我々は準備ができたら、それを適用するからunittestのを防ぐ方法を働いていますか?
おそらく私は間違ったアプローチをしていますか?フィクスチャを作成して、最終的にすべてが良いことを確認するだけですか? Fixtureは、移行が適用される前にロードされるのですか、またはすべて完了した後にロードされますか?私は、多分?その後、前方一つ一つをロールバック、特定の状態にそれをロールすることができましたMigrationExecutor
を使用して.migrate
で特定の移行を選び出すことで
。しかし、それは疑問を浮き彫りにしている。現在、実際のALTER TABLE命令がないために、sqliteを回避しています。ジュリーはまだ出ている。私たちは、テストのために、移行を無視するsettings_test.py
に次のコードを使用している
この場合、バージョン管理システムが役立つ場合があります。古い移行と新しい移行を持つ2つのブランチを維持する必要があります。これは、設定やコードなどが異なるプロダクション環境や開発環境用に別のブランチがある場合と似ています。 – xyres
@xyresはさまざまなコミットをチェックアウトしますが、一般的にunittestの範囲には入りません。 –