【问题标题】:Django testing - NoReverseMatchDjango 测试 - 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 种模式: []

【问题讨论】:

    标签: django


    【解决方案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'
      

      【讨论】:

        猜你喜欢
        • 2013-01-19
        • 2014-02-10
        • 2017-05-21
        • 1970-01-01
        • 2013-09-26
        • 2013-01-19
        • 2016-07-20
        相关资源
        最近更新 更多