由于 http://testserver 前缀,Django assertRedirects 测试失败
Django assertRedirects test fails due to http://testserver prefix
我想测试 /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
冲突?
我想你可以使用 request.path
像这样:
response = self.client.get('/sitemap.xml/')
self.assertEqual(response.status_code, 301)
self.assertEqual(response.path, '/sitemap.xml')
我猜重定向 url/response 是使用 build_absolute_uri 或类似的东西用完整路径创建的。?只是猜测...
首先,在较长的 运行 中,使用 url 名称而不是硬编码路径可能更容易。 url=reverse('sitemap.xml'), url = reverse('sitemap.xml') + '/' 给出一些想法...
无论如何,这可能会解决您的问题,而不必担心主机。
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 上测试)
我想测试 /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
冲突?
我想你可以使用 request.path
像这样:
response = self.client.get('/sitemap.xml/')
self.assertEqual(response.status_code, 301)
self.assertEqual(response.path, '/sitemap.xml')
我猜重定向 url/response 是使用 build_absolute_uri 或类似的东西用完整路径创建的。?只是猜测...
首先,在较长的 运行 中,使用 url 名称而不是硬编码路径可能更容易。 url=reverse('sitemap.xml'), url = reverse('sitemap.xml') + '/' 给出一些想法...
无论如何,这可能会解决您的问题,而不必担心主机。
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 上测试)