gpt4 book ai didi

Python、Django 单元测试。 RequestFactory 测试不起作用

转载 作者:太空狗 更新时间:2023-10-30 02:32:13 25 4
gpt4 key购买 nike

我有这个 View 要测试

def change_item(request):
name_change = request.POST.get('name_change')
cost_change = request.POST.get('cost_change')
category_change = request.POST.get('category_change')
product_id = request.POST.get('product_id')
category_name = Category.objects.get(name = category_change)
product = Product.objects.get(id__exact = product_id)
product.name = name_change
product.category = category_name
product.price = cost_change
product.save()
return HttpResponse()

我为它写了一个测试,但它不起作用(我想测试请求)

from django.test import RequestFactory
from django.test import TestCase
from views import change_item
from models import Product
from django.utils import unittest


class TestChange_item(TestCase):
def setUp(self):
self.factory = RequestFactory()

def change_item_test(self):
# Create an instance of a GET request.
request = self.factory.get('main/views')
# Test my_view() as if it were deployed at /customer/details
response = change_item(request)
self.assertEqual(response.status_code, 200)

当我运行它时,我会在控制台中看到它

ERROR: change_item_test (src.main.tests.TestChange_item)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/volodia/work/shopping-helper/src/main/tests.py", line 19, in change_item_test
response = change_item(request)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py", line 24, in _wrapped_view
if test_func(request.user):
AttributeError: 'WSGIRequest' object has no attribute 'user'

----------------------------------------------------------------------
Ran 1 test in 0.002s

FAILED (errors=1)

我能用它做什么?或者有一些不同的测试请求的方法?

最佳答案

如果您查看文档,您会发现您需要 manually add a user to the request .它不会自动为您执行此操作。

def change_item_test(self):
request = self.factory.get('main/views')
request.user = User.objects.create_user(username="bobalong")

像这样添加用户模拟发出登录请求。如果这不是您想要的,那么您应该创建一个 AnonymousUser。一般来说,您得到的错误应该为您提供您需要知道的一切。它明确告诉您测试失败,因为请求没有用户。向请求添加真实用户或添加模拟用户对象就是答案。

此外,您似乎正在测试一个只适用于 POST 请求的 View 。它会失败,因为 request.POST 没有正确的字典键。您可以通过执行

创建 POST 请求
factory.post('main/views', {'name_change': 'some name'})`

关于Python、Django 单元测试。 RequestFactory 测试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19465007/

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