いくつかのテストを実行するために、pytest (3.1.0) と pytest-django (3.1.2) をセットアップしました。これは、Ubuntu 17.04 および OSX 10.12.2 ではうまく機能しますが、テスト環境 (Ubuntu 12.04.5) では機能しません。
を確認するpytest --version
と、すべてが期待どおりに機能している環境でプラグインが検出されますが、テスト サーバーではプラグインがリストされていません。ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
これにより、作業環境の出力のようなエラーが発生します。
$ venv/bin/pytest --version
This is pytest version 3.1.0, imported from /home/me/code/myproject/myproject_device/venv/local/lib/python2.7/site-packages/pytest.pyc
setuptools registered plugins:
pytest-django-3.1.2 at /home/me/code/myproject/myproject_device/venv/local/lib/python2.7/site-packages/pytest_django/plugin.py
詳細を検索すると、pytest プラグインのインポート エラーの抑制に関するpytest の問題 (fi https://github.com/pytest-dev/pytest/issues/1307 ) がいくつか見つかりますが、これらは動作の変更に関するものです。 pytest 3 の場合、これらの種類の問題に対してエラーまたは警告が表示されます。しかし、django 自体からの ImproperlyConfigured 例外以外のエラーは表示されません。完全な出力:
$ ./vagrant_venv/bin/pytest --version
This is pytest version 3.1.0, imported from /vagrant/vagrant_venv/local/lib/python2.7/site-packages/pytest.pyc
$ ./vagrant_venv/bin/pytest -rw -s src
============================= test session starts ==============================
platform linux2 -- Python 2.7.12, pytest-3.1.0, py-1.4.33, pluggy-0.4.0
rootdir: /vagrant, inifile: pytest.ini
collected 36 items / 1 errors
==================================== ERRORS ====================================
_________ ERROR collecting src/myproject/myproject/tests/test_views.py _________
src/myproject/myproject/tests/test_views.py:6: in <module>
from ui.views import controlview
src/myproject/ui/views/__init__.py:2: in <module>
from controlviewdata import ControlViewData
src/myproject/ui/views/controlviewdata.py:5: in <module>
from django.views.decorators.csrf import csrf_exempt
vagrant_venv/local/lib/python2.7/site-packages/django/views/decorators/csrf.py:1: in <module>
from django.middleware.csrf import CsrfViewMiddleware, get_token
vagrant_venv/local/lib/python2.7/site-packages/django/middleware/csrf.py:14: in <module>
from django.utils.cache import patch_vary_headers
vagrant_venv/local/lib/python2.7/site-packages/django/utils/cache.py:26: in <module>
from django.core.cache import caches
vagrant_venv/local/lib/python2.7/site-packages/django/core/cache/__init__.py:34: in <module>
if DEFAULT_CACHE_ALIAS not in settings.CACHES:
vagrant_venv/local/lib/python2.7/site-packages/django/conf/__init__.py:46: in __getattr__
self._setup(name)
vagrant_venv/local/lib/python2.7/site-packages/django/conf/__init__.py:40: in _setup
% (desc, ENVIRONMENT_VARIABLE))
E ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!
=========================== 1 error in 7.25 seconds ============================
問題なくvagrant ボックスでこれを再現できubuntu/precise64
ます。Python 2.7 を新しいバージョンにアップグレードしようとしましたが、どちらも違いはありませんでした。
pytest-django
では、プラグインのロードを妨げるエラーを追跡するにはどうすればよいでしょうか?