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

Вернуться на верх