Как заставить расширение citext работать на тестах Django? - PullRequest
0 голосов
/ 24 октября 2019

Я запускаю тесты для модели с полем ArrayField(CICharField()), и они возвращают строку вместо списка. Я использую pytest-django для запуска тестов.

Я знаю, что возвращение строки вместо списка было известной проблемой в прошлом, но это исправлено в моей текущей версии Django (2.1.13).

Когда я воспроизводю тест из оболочки, все работает нормально. Кажется, все связано со средой тестирования, особенно с тем, как набор тестов создает базу данных. Насколько я понимаю, расширение citext не устанавливается должным образом во время тестов.

Если я запускаю тестовую батарею дважды, сохраняя базу данных (используя --reuse-db), второй (и следующий другой) запускработать на отличноЭто заставляет меня думать, что расширение установлено «слишком поздно».

Возможно, это не очень полезно, но вот результат, который я получаю:

self = <tests.test_ciarrayfield.CIArrayFieldTestCase testMethod=test_save_load>

    def test_save_load(self):
        print(settings.INSTALLED_APPS)
        instance = ProductFactory(sku="SKU1", product_types=[])
        loaded = Product.objects.get()
>       self.assertEqual(instance.product_types, loaded.product_types)
E       AssertionError: [] != '{}'

src/tests/test_ciarrayfield.py:14: AssertionError

И часть моей модели:

class Product(models.Model):
    product_types = ArrayField(
        CICharField(max_length=750),
        default=list, blank=True)

Очевидный ожидаемый результат - получение списка в этом поле после получения экземпляра из базы данных, а не строки. Как я уже сказал, это происходит со мной на оболочке, но не на тестах (если я не сохраняю тестовую базу данных и не запускаю тесты дважды).

...