ImportError: Не удалось импортировать модуль тестов: Django Tests
Я написал несколько тестов для модели, представления и сериализатора. Все тесты работают нормально, кроме тестов сериализатора.
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
........E
======================================================================
ERROR: testapp.tests.test_serializers (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: testapp.tests.test_serializers
Traceback (most recent call last):
File "C:\Python310\lib\unittest\loader.py", line 436, in _find_test_path
module = self._get_module_from_name(name)
File "C:\Python310\lib\unittest\loader.py", line 377, in _get_module_from_name
__import__(name)
File "F:\Python\django-advanced\testproj\testapp\tests\test_serializers.py", line 19, in <module>
AutoSlugField(), from_field(SlugField())
File "C:\Python310\lib\site-packages\django_extensions\db\fields\__init__.py", line 155, in __init__
raise ValueError("missing 'populate_from' argument")
ValueError: missing 'populate_from' argument
----------------------------------------------------------------------
Ran 9 tests in 0.034s
FAILED (errors=1)
Destroying test database for alias 'default'...
Я получаю приведенную выше ошибку, когда запускаю
python manage.py test
Вот мое дерево файлов - Имя моего проекта - testproj Имя моего приложения - testapp
testproj/
┣ .hypothesis/
┃ ┣ examples/
┃ ┃ ┣ 89906a9970b0f6fa/
┃ ┃ ┃ ┗ 7210af19145ec2a8
┃ ┃ ┗ f79909d6c0990774/
┃ ┃ ┗ 7210af19145ec2a8
┃ ┗ unicode_data/
┃ ┗ 13.0.0/
┃ ┃ ┗ charmap.json.gz
┣ testapp/
┃ ┣ migrations/
┃ ┃ ┣ __pycache__/
┃ ┃ ┃ ┣ 0001_initial.cpython-310.pyc
┃ ┃ ┃ ┣ 0002_alter_tag_name.cpython-310.pyc
┃ ┃ ┃ ┣ __init__.cpython-310.pyc
┃ ┃ ┃ ┗ __init__.cpython-38.pyc
┃ ┃ ┣ 0001_initial.py
┃ ┃ ┣ 0002_alter_tag_name.py
┃ ┃ ┗ __init__.py
┃ ┣ templates/
┃ ┃ ┣ testapp/
┃ ┃ ┃ ┣ base.html
┃ ┃ ┃ ┗ status.html
┃ ┃ ┗ base.html
┃ ┣ tests/
┃ ┃ ┣ __pycache__/
┃ ┃ ┃ ┣ test_models.cpython-310.pyc
┃ ┃ ┃ ┣ test_serializers.cpython-310.pyc
┃ ┃ ┃ ┣ test_views.cpython-310.pyc
┃ ┃ ┃ ┗ __init__.cpython-310.pyc
┃ ┃ ┣ test_models.py
┃ ┃ ┣ test_serializers.py
┃ ┃ ┣ test_views.py
┃ ┃ ┗ __init__.py
┃ ┣ __pycache__/
┃ ┃ ┣ admin.cpython-310.pyc
┃ ┃ ┣ apps.cpython-310.pyc
┃ ┃ ┣ models.cpython-310.pyc
┃ ┃ ┣ serializer.cpython-310.pyc
┃ ┃ ┣ tests.cpython-310.pyc
┃ ┃ ┣ tests.cpython-38.pyc
┃ ┃ ┣ urls.cpython-310.pyc
┃ ┃ ┣ views.cpython-310.pyc
┃ ┃ ┣ __init__.cpython-310.pyc
┃ ┃ ┗ __init__.cpython-38.pyc
┃ ┣ admin.py
┃ ┣ apps.py
┃ ┣ models.py
┃ ┣ serializer.py
┃ ┣ urls.py
┃ ┣ views.py
┃ ┣ viewsets.py
┃ ┗ __init__.py
┣ testproj/
┃ ┣ __pycache__/
┃ ┃ ┣ settings.cpython-310.pyc
┃ ┃ ┣ settings.cpython-38.pyc
┃ ┃ ┣ urls.cpython-310.pyc
┃ ┃ ┣ urls.cpython-38.pyc
┃ ┃ ┣ wsgi.cpython-310.pyc
┃ ┃ ┣ __init__.cpython-310.pyc
┃ ┃ ┗ __init__.cpython-38.pyc
┃ ┣ asgi.py
┃ ┣ checks.py
┃ ┣ settings.py
┃ ┣ urls.py
┃ ┣ wsgi.py
┃ ┗ __init__.py
┣ db.sqlite3
┣ manage.py
┗ requirements.txt
Выполняется 9 тестов, как показано на рисунке.
Мой файл test_serializers.py
from django.db.models import SlugField
from django_extensions.db.fields import AutoSlugField
from hypothesis import assume, given
from hypothesis.extra.django import (
TestCase,
from_model,
from_field,
register_field_strategy
)
from hypothesis.strategies import text
from ..models import Tag
from ..serializer import TagSerializer
register_field_strategy(
AutoSlugField(), from_field(SlugField())
)
class TagSerializerTests(TestCase):
@given(
text(
min_size=1,
max_size=Tag._meta.get_field("name").max_length
)
)
def test_data_serialization(self, name):
assume(name.strip() == name)
s1_tag = TagSerializer(data={name: "name"})
self.assertTrue(s1_tag.is_valid(), s1_tag.errors)
tag = s1_tag.save()
s2_tag = TagSerializer(tag)
self.assertTrue(s2_tag.data[name], "name")
@given(from_model(Tag))
def test_model_serialization(self, tag):
assume(tag.name.strip() == tag.name)
s1_tag = TagSerializer(tag)
self.assertTrue(tag.name, s1_tag.data["name"])
self.assertTrue(tag.slug, s1_tag.data["slug"])
tag.delete()
s2_tag = TagSerializer(data=s1_tag.data)
self.assertTrue(s2_tag.is_valid(), s2_tag.errors)
new_tag = s2_tag.save()
self.assertTrue(tag.name, new_tag.name)
self.assertTrue(tag.slug, new_tag.slug)
Я не знаю, почему он запускает тесты test_models и test_views, но не сериализаторы.
Мой файл settings.py для справки -
Строка 19 вашего тестового модуля является register_field_strategy(AutoSlugField(), from_field(SlugField())).
Вы пытаетесь создать экземпляр AutoSlugField без аргумента, но именованный параметр populate_from является обязательным.
Посмотрите реализацию: https://github.com/django-extensions/django-extensions/blob/main/django_extensions/db/fields/__init__.py#L155