0

Django を使用して Rest アプリケーションを作成しています。
現在、アプリケーションの単体テストに取り組んでおりcoverage source=="." manage.py test myapp --settings="mycustomsettings"、テストを開始してカスタム conf ファイルとカバレッジ結果を使用してテストを実行できるスクリプトを作成することにしました。これが私のツリーです:

|-- apps
|   |-- __init__.py
|   |-- me_api
|   |-- me_auth
|   |-- me_core
|   |-- me_import
|   `-- me_payment
|-- manage.py
|-- settings.py
|-- settings.pyc
|-- tests
|   |-- coveragerunner.py
|   |-- geodjango.db
|   |-- __init__.py
|   |-- local_settings.py
|   `-- settings.py
|-- urls.py
`-- urls.pyc

apps/ フォルダーにあるアプリをテストしたい。これが私のコードです(tests/coveragerunner.pyにあります)

import os
import sys
from coverage import coverage

sys.path.append(os.path.join(os.path.dirname(__file__), "../"))
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings'

def main():
    """
    Run tests and generates a coverage report.
    """
    cov = coverage()
    cov.erase()
    cov.start()

    from django.conf import settings
    from django.test.utils import get_runner

    TestRunner = get_runner(settings)
    test_runner = TestRunner()
    failures = test_runner.run_tests(['me_api'])

    cov.stop()

if __name__ == '__main__':
    main()

テスト用のデフォルトのデータベースとして、spatialite db である geodjango.db を使用しています。私のスクリプトは django の設定を取得しますが、実行するとデータベースが空のようです。DBを単独で同期しません。

DatabaseError: no such table: me_auth_emailuser

テストを実行する前に django にデータベースを同期するように指示する方法はありますか、それとも何か間違ったことをしたのでしょうか? ありがとう。

PS : manager.py を使用したとき、DB に問題はありませんでした。(spatialite dbと異なる設定ソースを使用しても)

4

1 に答える 1

0

迅速で汚い解決策は次のとおりです。

  1. 非テスト用にも、データベース エンジンを sqlite に設定します。
  2. syncdb を作成して、test データベースのテンプレートを作成します。
  3. これで、テストが機能するはずです。
  4. データベース エンジンを postgesql に戻すことを忘れないでください。
于 2013-07-20T10:10:00.827 に答える