У меня есть приложение Django, работающее нормально. Когда я запускаю тесты с помощью pytest, он работает только с служебными классами (поэтому не связан с Django).
Например, тест из пакета A, вызывающий служебный класс из этого или другого пакета, работает нормально. Однако я сталкиваюсь с ошибкой, как только импортирую класс django.
пример 1: я импортирую свою модель (в тесте), начиная с тестового класса:
from app.common.models import Country
-> ImportError: нет модуля с именем django.db
[django.db вызывается в models.py]
пример 2: я импортирую преобразователь URL (в тесте), начиная тестовый класс с:
from django.core.urlresolvers import reverse
-> ImportError: нет модуля с именем django.core.urlresolvers
первая попытка исправления
Следуя другой теме, я установил содержимое PYTHONPATH:
/home/user/pyenv/lib/python3.5/site-packages
Эта папка содержит установленные пакеты в virtualenv: django, pytest, psycopg2 и другие.
1) Если я установил DJANGO_SETTINGS_MODULE в тот же файл, что и приложение, "py.test" выдаст эту ошибку, оканчивающуюся на: File "/home/user/pyenv/lib/python3.5/site-packages/django/db/backends/ postgresql / base.py ", строка 24, в raise ImproperlyConfigured (" Ошибка при загрузке модуля psycopg2:% s "% e)
2) Если я устанавливаю DJANGO_SETTINGS_MODULE на меньший файл настроек теста, содержащий только информацию о базе данных, я сталкиваюсь с другой ошибкой (сбой self.client в тесте):
class Test(unittest.TestCase):
def testUrls(self):
response = self.client.get('/countries/all/get')
self.assertEqual(response.status_code, 200)
-> AttributeError: объект 'Test' не имеет атрибута 'client'
дополнительная информация:
1) Интерпретатор Python для приложения находится в файле virtualenv.
2) conftest.py находится в корневой папке приложения, в том же месте, что и manage.py, и имеет следующее содержимое:
import os
import sys
sys.path.append(os.path.dirname(__file__))
3) pytest.ini находится в той же папке, что и manage.py, с таким содержимым:
[pytest]
python_files = test_*.py test*.py
4) самое главное: приложение работает нормально, поэтому настройки db действительны
Если у вас есть представление о том, что не так и как тестировать классы django, любая идея будет приветствоваться. Заранее спасибо.