由于http:// testserver前缀,Django assertRedirects测试失败

akx*_*xlr 4 django django-testing django-1.11

我想测试/sitemap.xml/重定向到/sitemap.xml.我正在使用此代码:

res = self.client.get('/sitemap.xml/')
self.assertRedirects(res, '/sitemap.xml', status_code=301)
Run Code Online (Sandbox Code Playgroud)

并收到以下错误:

AssertionError: Response redirected to 'http://testserver/sitemap.xml', expected '/sitemap.xml'
Run Code Online (Sandbox Code Playgroud)

我该如何编写此测试以避免testserver冲突?

Dan*_*man 8

我想使用build_absolute_uri或类似的东西使用完整路径创建重定向url/response.只是一个猜测......

首先,从长远来看,使用urlnames而不是硬编码路径可能更容易.url = reverse('sitemap.xml'),url = reverse('sitemap.xml')+'/'给出一些想法......

Django命名url模式

无论如何,这可以解决您的问题,而无需担心主机.

res = self.client.get('/sitemap.xml/')
expected_url = res.wsgi_request.build_absolute_uri('/sitemap.xml')
self.assertRedirects(res, expected_url, status_code=301)
Run Code Online (Sandbox Code Playgroud)

(在Django 1.10.6上测试过)