django - 如何使 citext 扩展在 Django 测试中工作?
问题描述
我正在针对具有ArrayField(CICharField())
字段的模型运行测试,它们返回字符串而不是列表。我pytest-django
用来运行测试。
我知道返回字符串而不是列表在过去是一个已知问题,但它已在我当前的 Django 版本(2.1.13)中修复。
当我从 shell 重现测试时,一切正常。事情似乎与测试环境有关,特别是测试套件如何创建数据库。据我了解,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)
显而易见的预期结果是在从数据库中获取实例后获取该字段的列表,而不是字符串。正如我所说,这发生在我的 shell 上,但没有发生在测试上(除非我保留测试数据库并运行两次测试)。
解决方案
推荐阅读
- reactjs - Material-UI - TypeScript - 通用自动完成
- protocol-buffers - 通过 UDP 解码 protobuf
- ssis - 尝试在 SSIS 中加载带有平面文件源的 UTF-8 CSV 文件,不断收到错误消息说它是 ANSI 文件格式
- cakephp - CakePHP 4 多个复选框
- c++ - 如何通过 MATLAB 引擎将 C++ 数组数据发送到 MATLAB
- kubernetes - 在具有特定标签的节点上获取 pod
- parameters - 迭代器的通用可变和非可变参数
- sql - 未包含在组中的非聚合值在哪里?
- apache - 添加 SSL 后,Cakephp 3 前缀路由在 Linux 服务器中不起作用
- javascript - 有没有办法自动折叠响应式布局折叠列表的特定列?