2

という便利な関数を使用して、テスト段階で実行する一連のファクトリがありますCreate。既存のプロジェクトを参照する必要がある場合は、それをパラメーターとして渡します。そうでない場合は、FactoryBoy で新しいプロジェクトを作成します。

def Create(project=ProjectFactory()):
    # do stuff with project

私は次のように関数を呼び出しています:

Create() # new project will be defined
Create(existing_project) # existing project will be used

しかし、うまくいきません。たくさんのエラーがあります:

E   ProgrammingError: relation "auth_user" does not exist
E   LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
E                                                                 ^

数日間さまざまな回避策を試した後、このバージョンが機能することがわかりました。

def Create(project=None):
    project = ProjectFactory() if not project else project
    # do stuff with project

私にとっては同じことをしますが、ここで何が欠けていますか?

4

1 に答える 1

2

のデフォルトの引数def Create(project=ProjectFactory()):は、モジュールのロード時、つまりテスト ランナーの開始時にバインドされることに注意してください。Projectテスト ランナーはテスト データベースを最初から移行するため、その時点で を作成して保存することはできません。

2番目のバージョンでは

def Create(project=None):
    project = ProjectFactory() if not project else project

を作成するコードは関数内にあるため、移行が実行されたProject、関数が呼び出されたときにのみ実行されます。

于 2016-04-04T09:20:14.907 に答える