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