我目前正在使用 pytest 和 pytest-django 为我的 Django 应用程序编写测试。我的一项测试涉及创建多个类别实例并验证它们是否在 API 响应中正确列出。这是测试的片段:
@pytest.mark.django_db
def test_auth_user_can_list_categories(auth_client, category_factory):
categories = category_factory.create_batch(5)
url = reverse("category-list")
response = auth_client.get(url)
assert response.status_code == 200
for i, category in enumerate(categories):
assert response.data[i]["id"] == category.id
assert response.data[i]["name"] == category.name
在此测试中,我创建 5 个不同的类别,然后使用 enumerate 循环它们以验证每个类别是否在 API 响应中正确列出。
我想知道这种枚举类别以将其与 API 响应相匹配的方法是否被认为是一种好的做法。有没有更好或更有效的方法来测试这个场景?具体来说,是否有可以提供更强大或可扩展解决方案的视图测试替代策略?
如果您能提供有关如何改进此测试或替代方法以达到相同结果的建议或最佳实践,我将不胜感激。
如果您还想测试 API 中的对象顺序是否正是您的类别工厂创建的顺序,那就没问题了。
无论如何,对于一种更短、更稳健的方法,您还可以测试输出中是否没有获得额外的类别,
zip(..., strict=True)
。
...
assert response.status_code == 200
for resp_cat, category in zip(response.data, categories, strict=True):
assert resp_cat["id"] == category.id
assert resp_cat["name"] == category.name