2016-09-23 8 views
2

私は最近、私が取り組んでいるdjangoプロジェクト内で再利用可能なアプリケーションを実装しました。質問のために、それをreusable_appとしましょう。このアプリにもいくつかのユニットテストがありますが、これらのテストは、model.pyのテストの横にあるいくつかの基本モデルに依存しています。今Djangoシングルテスト移行

/resuable_app 
    __init__.py 
    models.py 
    views.py 
    urls.py 
    /tests 
     __init__.py 
     tests.py 
     /simple_app 
      __init__.py 
      models.py 

私はテストの設定ファイルにINSTALLED_APPSでフォルダを指定しない限り、モデルはデータベースにロードされません。私はこれを達成するための別の方法があるかどうか、設定ファイルにアプリを公開する必要はありませんか?私は@override_settings経由でアプリを指定できるようですが、移行は実行されません。

例:

@override_settings(INSTALLED_APPS=['reusable_app']) 
class TestReusableApp(TestCase): 
def test_something(self): 
    ... 

reusable_appが設定モジュールINSTALLED_APPSに指定されていない場合、これはまだProgrammingErrorが得られます。私は何かを逃しているのですか、それとも別のアプローチですか?

答えて

2

ここでは、テストランナーがテーブルを設定してからの前に@override_settingsというアプリケーションを追加することが問題だと思います。

通常、私が再利用可能なアプリケーションで行うことは、テストするアプリケーションを含む設定で、 "example"アプリケーションのコンテキストでテストを実行することです。私は再利用可能なアプリケーションを別々にパッケージ化しているので、通常はかなりうまく動作します。これは私の過去のプロジェクトのexampleです。

しかし、これが不可能な場合は、テストでsetUpを無効にして、そのコード内で "migrate"コマンドを呼び出すことができます。例:

from django.core.management import call_command 

@override_settings(INSTALLED_APPS=['reusable_app']) 
MyTestCase(TestCase): 
    def setUp(self): 
     call_command('migrate', 'reusable_app') 

これはちょっと面倒ですが、試してみる価値があります。行動の仕方によっては、django.setup()も実行する必要があります。