Django 1.7.1 のユニットテストをPyDevで実行するとAppRegistryNotReadyが発生する

Eclipse + PyDev で、Django1.7.1 のユニットテストを実行すると、AppRegistryNotReady エラーとなる。

pydev_unittest_error

とりあえず、リクエストの結果を取りたいだけで、別段変わったことはしていない。のに。。。

# -*- encoding:utf-8 -*-
from django.conf import settings
from django.test import TestCase
from django.test.client import Client
from phraseit import *

class ViewTest(TestCase):
    def test_home(self):
        c = Client()
        req_param = {}
        res = c.get('/', req_param)
        print res.status_code
        print res      

実行すると、こんなエラー。

普通に実行は可能で、ブラウザから実行結果は確認できるのだが、ユニットテストだとだめ。

Finding files... done.
Importing test modules ... done.
Creating test database for alias 'default'...
Traceback (most recent call last):
  File "C:\Programs\eclipse-luna-pydev\plugins\org.python.pydev_3.9.2.201502050007\pysrc\runfiles.py", line 234, in 
    main()
  File "C:\Programs\eclipse-luna-pydev\plugins\org.python.pydev_3.9.2.201502050007\pysrc\runfiles.py", line 78, in main
    return pydev_runfiles.main(configuration)  # Note: still doesn't return a proper value.
  File "C:\Programs\eclipse-luna-pydev\plugins\org.python.pydev_3.9.2.201502050007\pysrc\pydev_runfiles.py", line 835, in main
    PydevTestRunner(configuration).run_tests()
  File "C:\Programs\eclipse-luna-pydev\plugins\org.python.pydev_3.9.2.201502050007\pysrc\pydev_runfiles.py", line 793, in run_tests
    MyDjangoTestSuiteRunner(run_tests).run_tests([])
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\test\runner.py", line 147, in run_tests
    old_config = self.setup_databases()
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\test\runner.py", line 109, in setup_databases
    return setup_databases(self.verbosity, self.interactive, **kwargs)
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\test\runner.py", line 299, in setup_databases
    serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\db\backends\creation.py", line 377, in create_test_db
    test_flush=True,
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\core\management\__init__.py", line 93, in call_command
    app_name = get_commands()[name]
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\utils\lru_cache.py", line 101, in wrapper
    result = user_function(*args, **kwds)
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\core\management\__init__.py", line 73, in get_commands
    for app_config in reversed(list(apps.get_app_configs())):
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\apps\registry.py", line 137, in get_app_configs
    self.check_apps_ready()
  File "C:\Programs\venv\phrase_env\lib\site-packages\django\apps\registry.py", line 124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

 

ググってみると、以下の処理を差し込む必要があるようだ。

https://docs.djangoproject.com/en/1.7/releases/1.7/

If you’re using Django in a plain Python script — rather than a management command — and you rely on theDJANGO_SETTINGS_MODULE environment variable, you must now explicitly initialize Django at the beginning of your script with:

>>> import django
>>> django.setup()

Otherwise, you will hit an AppRegistryNotReady exception.

 

テストケースに、上記の import django, dango.setup() を追記してみる。

# -*- encoding:utf-8 -*-
from django.conf import settings
from django.test import TestCase
from django.test.client import Client
from phraseit import *

import django
django.setup()

class ViewTest(TestCase):
    def test_home(self):
        c = Client()
        req_param = {}
        res = c.get('/', req_param)
        print res.status_code
        print res      

成功。

pydev_unittest_error02

とりあえずよかった。よかった。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です