0

フィクスチャデータを使用してテストを実行しようとしていますが、悪名高いIntegrityError: column user_id is not uniqueエラーが発生します。

ここで、フィクスチャを見ると、フィクスチャ内のユーザーモデルのIDが互いに一意であることがわかります。衝突は(非テスト)データベースの既存のデータとの衝突であると推測します。これは正しいです?(編集:これは正しくないようです-以下を参照してください)

テストで利用できるデータを正確に制御できるようにしたいと考えています。djangoテストランナーがライブデータベースからデータとフィクスチャデータをロードしないようにする方法はありますか?(編集:はい-Thibautの回答を参照してください)。

編集: Thibautの回答に従って、メモリ内のクリーンなデータベースを使用するように切り替えても、問題は解決しません。したがって、既存の開発データベースは問題ではないと推測します。

したがって、3番目の質問があります。テスト中にフィクスチャをロードするときにIntegrityErrorの原因を診断するにはどうすればよいですか?(そして、どうすれば修正できますか?)

編集2:私の問題の解決策は、クリーンなデータベース(Thibault Jによる)から始めることに加えて、エラーが発生しなくなるまで、ユーザーを参照するインストール済みアプリからモデルを削除することでもありました。

DrTyrsaの他の提案(データを見る以外)は、自然キーを使用することでした。これは、ユーザーにとって、ある程度のモンキーパッチやその他のハッカーが必要だったことは間違いありません(ユーザーのコードを編集しますか?)。

4

1 に答える 1

0

製品とテストには別のデータベースを使用してください(グッドプラクティス)。でsettings.py

if 'test' in sys.argv:                                                          
    try:                                                                        
        from test_settings import *                                             
    except ImportError:                                                         
        pass

test_settings.py

DATABASES = {                                                                   
    'default': {                                                                
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'memory://testdb',
    }                                                                           
}
于 2011-12-07T10:16:02.273 に答える