Django 测试 - NoReverseMatch
Posted
技术标签:
【中文标题】Django 测试 - NoReverseMatch【英文标题】:Django testing - NoReverseMatch 【发布时间】:2014-07-16 06:25:53 【问题描述】:为什么这个测试不起作用?
这是我的views.py:
class ObjectDetailView(LoginRequiredMixin, DetailView):
template_name = "object-detail.html"
model = Object
slug_field = 'username'
def dispatch(self, request, *args, **kwargs):
....
urls.py:
url(r'^object/details/(?P<slug>[-\w.]+)/$', ObjectDetailView.as_view(), name='object-details'),
tests.py:
class ObjectViewsTestCase(TestCase):
fixtures = ['/app/fixtures/object_fixture.json', ]
def test_object_details(self):
user = User.objects.get(id=1)
self.client.login(username=user.username, password=user.password)
resp = self.client.get(reverse('object-details', kwargs='slug': user.username))
self.assertEqual(resp.status_code, 200)
我的错误:
NoReverseMatch:使用参数 '()' 和 找不到关键字参数''slug':u'admin''。尝试了 0 种模式: []
【问题讨论】:
【参考方案1】:我在更新和删除视图时遇到了同样的问题。在我看来,您需要在请求中传递 PK ......就像这样:
def test_service_delete_view(self):
w = self.create_service()
response = self.client.get(reverse('services:service-delete', kwargs='pk': w.pk))
self.assertEqual(200, response.status_code)
【讨论】:
【参考方案2】:您的设置中有ROOT_URLCONF
吗?如果是这样,请确保在运行测试时加载这些设置。或者您可以在测试中添加以下内容:
class ObjectViewsTestCase(TestCase):
fixtures = ['/app/fixtures/object_fixture.json', ]
urls = 'path.to.your.urls' # for instance 'base.app.urls'
【讨论】:
以上是关于Django 测试 - NoReverseMatch的主要内容,如果未能解决你的问题,请参考以下文章
python测试开发django-10.django连接mysql