首页 > 解决方案 > 由于 http://testserver 前缀,Django assertRedirects 测试失败

问题描述

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

res = self.client.get('/sitemap.xml/')
self.assertRedirects(res, '/sitemap.xml', status_code=301)

并得到以下错误:

AssertionError: Response redirected to 'http://testserver/sitemap.xml', expected '/sitemap.xml'

我应该如何编写这个测试以避免testserver冲突?

标签: djangodjango-testingdjango-1.11

解决方案


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

首先,从长远来看,使用 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)

(在 Django 1.10.6 上测试)


推荐阅读