現在、既存のコードの単体テストを作成しています。次の問題に直面しました。
テスト データベースを作成するために syncdb を実行した後、Django は django_content_type や auth_permissions などのいくつかのテーブルを自動的に埋めます。
次に、ユーザー登録の確認などの複雑なテストを実行する必要があるとします。これには、多数のデータ テーブルとそれらの間の接続が必要です。
フィクスチャを作成するために既存のデータベース全体を使用しようとすると (それは私にとってかなり便利です)、hereのようなエラーが表示されます。これは、Django が django_content_type のようなテーブルを既に埋めているために発生します。
次に考えられる方法は、django dumpdata --exclude オプションを使用して、すでに syncdb テーブルでいっぱいになっていることです。しかし、これもうまく機能しません。なぜなら、syncdb によって自動的に作成されたデータベースとユーザー権限テーブルからユーザー オブジェクトとユーザー グループ オブジェクトを取得すると、それらを接続する主キーが間違っているため、エラーを受け取る可能性があるからです。これは、ここの「フィクスチャ地獄」の部分でよりよく説明されていますが、そこに示されている解決策は見栄えがよくありません)
次に考えられるスキームは次のとおりです。
- テストを実行しています。Django はテスト データベースを作成し、syncdb を作成して、それらすべてのテーブルを作成します。
- 私のテスト セットアップでは、このデータベースを削除して、新しい空のデータベースを作成しています。
- テスト セットアップでも既存のデータベースからデータ ダンプを読み込む