背景
DjangoアプリケーションをHerokuへデプロイするようにしたので、setting.pyを以下のようにローカル環境用とHeroku環境用に分割しました。
- utalog/
- settings/
- __init__.py
- デフォルトではローカル設定を読み込む
- common.py
- heroku.py
- local.py
- __init__.py
- settings/
すると、python manage.py test
では単体テストを実行できるのですが、エディターの左にある▶︎で単体テストが実行できなくなりました。
Testing started at 23:59 ...
Traceback (most recent call last):
File "/Users/massakai/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.3345.131/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_test_manage.py", line 168, in <module>
utility.execute()
File "/Users/massakai/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.3345.131/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_test_manage.py", line 142, in execute
_create_command().run_from_argv(self.argv)
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/core/management/commands/test.py", line 24, in run_from_argv
super().run_from_argv(argv)
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/core/management/base.py", line 414, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/core/management/base.py", line 460, in execute
output = self.handle(*args, **options)
File "/Users/massakai/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.3345.131/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_test_manage.py", line 104, in handle
failures = TestRunner(test_labels, **options)
File "/Users/massakai/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.3345.131/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_test_runner.py", line 254, in run_tests
return DjangoTeamcityTestRunner(**options).run_tests(test_labels,
File "/Users/massakai/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.3345.131/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_test_runner.py", line 156, in run_tests
return super(DjangoTeamcityTestRunner, self).run_tests(test_labels, extra_tests, **kwargs)
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/test/runner.py", line 994, in run_tests
suite = self.build_suite(test_labels, extra_tests)
File "/Users/massakai/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.3345.131/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_test_runner.py", line 120, in build_suite
suite = super(DjangoTeamcityTestRunner, self).build_suite(*args, **kwargs)
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/test/runner.py", line 847, in build_suite
tests = self.load_tests_for_label(label, discover_kwargs)
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/test/runner.py", line 798, in load_tests_for_label
tests = self.test_loader.loadTestsFromName(label)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/unittest/loader.py", line 154, in loadTestsFromName
module = __import__(module_name)
File "/Users/massakai/github/utalog/histories/tests/test_validation.py", line 9, in <module>
from accounts.models import User
File "/Users/massakai/github/utalog/accounts/models.py", line 4, in <module>
from django.contrib.auth.models import AbstractUser
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/contrib/auth/models.py", line 5, in <module>
from django.contrib.contenttypes.models import ContentType
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 131, in <module>
class ContentType(models.Model):
File "/Users/massakai/.virtualenvs/utalog/lib/python3.10/site-packages/django/db/models/base.py", line 132, in __new__
raise RuntimeError(
RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
環境
- PyCharm 2022.2 (Professional Edition)
- Python 3.10.0
- Django 4.0.7
解決方法
2行目に There is no such settings files settings
とあり、デフォルトで読み込まれる設定 utalog.settings
がファイルでなくなったことが問題のようです。
実行 / デバッグ構成に環境変数 DJANGO_SETTINGS_MODULE
=utalogs.settings.local を追加することで実行できるようになりました。
初めはターゲットごとに環境変数を設定していたのですが、実行 / デバッグ構成テンプレートを使ってDjango テストに環境変数を指定しておけば、都度環境変数を設定しなくてもよくなりました。
追記
Djangoの設定が問題だったようです。
「Preference」 → 「言語 & フレームワーク」 → 「Django」の「設定」にlocal.pyを指定してやってもテストが動くようになりました。