gpt4 book ai didi

django - 使用 Django RequestFactory 时如何传递额外的关键字参数?

转载 作者:行者123 更新时间:2023-12-04 01:56:32 26 4
gpt4 key购买 nike

我正在尝试为 View 编写一个简单的单元测试,但在使用 RequestFactory 设置请求时,我无法将额外的关键字参数传递给 View 。

首先,这是 urlpattern:

# app/urls.py
# Example URL: localhost:8000/run/user/1/foo
urlpatterns = [
url(r'^user/(?P<uid>\d+)/(?P<uname>\w+)/$',
views.user_kw,
name='user-kw'),
]

这是我正在测试的 View :

# app/views.py
def user_kw(request, *args, **kwargs):
uid = kwargs['uid']
uname = kwargs['uname']
return render(request, 'run/user.html', context)

最后,这是测试:

# app/tests.py
def test_user_kw(self):
factory = RequestFactory()
# ???
request = factory.post('user/')
response = views.user_kw(request)
self.assertEqual(response.status_code, 200)

如您所料,当我运行测试时,出现了这个错误:

======================================================================
ERROR: test_user_kw (run.tests.TestViews)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/jones/code/django/testing/run/tests.py", line 53, in test_user_kw
response = views.user_kw(request, {"uid": 1, "uname": "foobar"})
File "/Users/jones/code/django/testing/run/views.py", line 28, in user_kw
uid = kwargs['uid']
KeyError: 'uid'

----------------------------------------------------------------------

关于 RequestFactory 对象的 Django 文档没有讨论这种情况。我查看了 RequestFactory 代码本身,但无法弄清楚如何设置对象来说明 URL 中包含的两个关键字参数。我也无法在网上找到任何解决这种情况的方法。

我应该补充一点,我确实设法为我使用位置参数的情况编写了一个测试并且它有效:

def test_user_pos(self):
factory = RequestFactory()
request = factory.post('user/')
response = views.user_pos(request, 1, 'foo')
self.assertEqual(response.status_code, 200)

我只是不知道如何重写关键字参数的测试。也许我看这个问题太久了,答案就在眼前,但我就是看不到。

最佳答案

您可以按正常方式将关键字参数传递给 user_pos 方法:

response = views.user_kw(request, uid=1, uname='foo')

您的错误消息表明您尝试过:

response = views.user_kw(request, {"uid": 1, "uname": "foobar"})

这不是传递关键字参数,而是将字典作为位置参数传递。请注意,您可以使用 ** 来解压字典:

response = views.user_kw(request, **{"uid": 1, "uname": "foobar"})

关于django - 使用 Django RequestFactory 时如何传递额外的关键字参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com