【发布时间】:2020-03-18 17:47:01
【问题描述】:
我正在尝试为自定义的 DjangoRestFramework 超链接相关字段创建真正的单元测试。但我似乎无法绕过这个错误:
django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "relatedtestmodel-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
这里是单元测试,为了简化示例而进行了精简:
from django.conf.urls import url
from django.test import TestCase, override_settings
from api_tests.models import APITestModel, RelatedTestModel
from api_tests.serializers import APITestModelSerializer
def dummy_view(request, pk):
pass
urlpatterns = [
url(r'/path/is/irrelevant/', dummy_view, name='relatedtestmodel-detail')
]
@override_settings(ROOT_URLCONF='tests.test_relations')
class HyperlinkedRelatedFieldTestCase(TestCase):
def setUp(self):
self.parent = APITestModel.objects.create()
self.child = RelatedTestModel.objects.create(parent=self.parent)
assert self.child.parent.id == self.parent.id
def test_to_internal_value_correct_error_message(self):
queryset = APITestModel.objects.all()
serializer = APITestModelSerializer(queryset, many=True, context={'request': None})
expected = [{'foo': 'bar'}]
self.assertEqual(serializer.data, expected)
我或多或少地取消了https://github.com/encode/django-rest-framework/blob/master/tests/test_relations_hyperlink.py 的测试,因为我发现谁比 DRF 的制造商更了解如何对 DRF 进行单元测试?但就目前而言,我的测试拒绝运行。在测试期间,当我尝试访问 serializer.data 以获取断言时,会引发错误。
请特别注意,我使用自定义 urlpatterns 覆盖了设置(这是同一个文件,因此 urlpatterns 在顶部)。所以我不明白为什么 DRF 认为 url 名称不存在 - 我可以清楚地看到我的 url conf 实际上只有那个视图名称!我什至已经编辑了我的实际 URL conf 并将其替换为此处显示的单个命名的虚拟 url 模式,并删除了设置覆盖,只是为了确保不是 override_settings 根本不是工作,但即使那样我也会遇到同样的错误。
在我看来,虚拟 url 模式与 DRF 在他们的测试中所做的完全一样。有人知道发生了什么吗?
更多要求的上下文:
api_tests.models:
from django.db import models
class APITestModel(models.Model):
pass
class RelatedTestModel(models.Model):
parent = models.ForeignKey(
APITestModel,
related_name='children',
related_query_name='child'
)
我目前无法访问回溯,但我可以确认它没有通过我的任何代码 - 它全部与 DjangoRestFramework 代码隔离,基本上完全是关系.py
【问题讨论】:
-
请edit您提问并添加
APITestModelSerializer的定义。另外,请添加错误的完整回溯。
标签: django unit-testing django-rest-framework