[解決済み] Django 1.7でユニットテストを実行する際にmigrationsを無効にする
質問
Django 1.7 導入 データベースマイグレーション .
Django 1.7 でユニットテストを実行するとき、強制的に マイグレート を強制され、それには長い時間がかかります。ですから、私は django のマイグレーションをスキップし、最終的な状態でデータベースを作成したいと思います。
コードのその部分がテストされないので、移行を無視することが悪い習慣であることは知っています。しかし、そのようなことはありません。私は CI テストサーバー (jenkins) で完全なマイグレーションを実行しています。私は、速度が重要であるローカルテストにおいてのみ、移行をスキップしたいのです。
いくつかのコンテキスト。
Django まで 1.6 を使用する場合、South を使用する場合、私は south_tests_migrate という設定にします。
デフォルトでは、South の syncdb コマンドは非対話モードで実行された場合、マイグレーションも適用します。これはテストの実行中も含まれます - テストを実行するたびにすべてのマイグレーションが実行されます。
もしテストランナーが migrate の代わりに syncdb を使うようにしたい場合 - 例えば、マイグレーションの適用に時間がかかりすぎる場合 - settings.py で SOUTH_TESTS_MIGRATE = False に設定するだけです。
しかし syncdb はもう存在せず、今は マイグレート .
そして Django からは 1.8 を使うことにします。 --keepdb パラメータを使用します。
keepdb オプションは、テスト実行の間にテストデータベースを保持するために使用できます。これは、特に大規模なテストスイートにおけるテストの実行時間を大幅に短縮する、作成と破棄の両方のアクションをスキップできる利点があります。テスト データベースが存在しない場合、最初の実行時に作成され、その後の各実行時に保存されます。適用されていない移行は、テスト スイートを実行する前にテスト データベースに適用されます。
ということで、この質問は Django 1.7 に限定されます。
どのように解決するのですか?
次のサイトをご覧ください。 この回避策 Bernie Sumption が Django の開発者メーリングリストに投稿したものです。
makemigrations がまだ実行されていない場合、 "migrate" コマンドはアプリを未移行として扱い、モデルから直接テーブルを作成します。 コマンドはアプリを移行されていないものとして扱い、1.6 で syncdb が行ったようにモデルから直接テーブルを作成します。 syncdb が 1.6 で行ったように、モデルから直接テーブルを作成します。私はユニットテストのために新しいSettingsモジュールを定義しました。 というユニットテストのための新しい設定モジュールを定義しました。 をインポートし、以下の行を追加しています。
MIGRATION_MODULES = {"myapp": "myapp.migrations_not_used_in_tests"} といった行を追加します。
そして、このようにテストを実行します。
DJANGO_SETTINGS_MODULE="myapp.settings_test" python manage.py test
これは、アプリが移行されていないと migrate に思わせるためです。 テストデータベースが作成されるたびに、現在の の構造を反映します。
Django 1.9 では、このような状況は
は多少改善されています
に設定することができます。
None
:
MIGRATION_MODULES = {"myapp": なし}
関連
-
[解決済み] RuntimeWarning: DateTimeFieldがナイーブなdatetimeを受信した
-
[解決済み】アプリにtestsディレクトリがあるとき、Djangoで特定のテストケースを実行する
-
[解決済み] Python Djangoでユニットテストを実行中にログを無効にするにはどうすればよいですか?
-
[解決済み] Django-Rest-Framework のシリアライザーで Request.User を取得する方法とは?
-
[解決済み] Django で null を許容するユニークなフィールド
-
[解決済み] Djangoアプリの命名規則はありますか?
-
[解決済み] egg_infoエラーでpipからインストールできない
-
[解決済み] Django モデルで外部キーフィールドをオプションにすることはできますか?
-
[解決済み] Django で https 接続を非 https 接続と同じように簡単にテストするには 'runserver' を使うには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Djangoの基本(16)。テンプレートタグの紹介とそのカスタマイズ方法
-
django store to databaseは現地時間より8時間短い?(2021-05-12更新)
-
オペレーショナルエラーです。1050 解決
-
django のクエリセット操作
-
[解決済み] request.GETでURLパラメータを取得する
-
[解決済み] Django REST Framework: ModelSerializerに追加フィールドを追加する
-
[解決済み] Django-Rest-Framework のシリアライザーで Request.User を取得する方法とは?
-
[解決済み] Djangoアプリの命名規則はありますか?
-
[解決済み] 学習に適したオープンソースのdjangoプロジェクト【非公開
-
[解決済み] Django Forms: 有効でない場合、エラーメッセージとともにフォームを表示する