django 测试:客户端请求是空字符串而不是 WSGIRequest 对象
django tests: client request is an empty string instead of an WSGIRequest object
我正在开发一个 django 项目,为此我创建了一个在其他项目中使用的应用程序。应用程序和项目有自己的存储库和文件夹。
我想编写特定于该形式的应用程序的测试:
from django.test import TestCase
from django.urls import reverse
class SignUpTest(TestCase):
def test_my_signup_get2(self):
response = self.client.get(reverse('signup'))
self.assertEqual(response.status_code, 200)
当我运行从我的应用程序文件夹中进行此类测试时,生成的请求对象是一个空字符串,这将导致测试失败。在项目逻辑中,正在访问 request.user
,它不存在于字符串中。
当我 运行 从使用此应用程序的项目文件夹中进行完全相同的测试时,请求对象是一个 WSGIRequest
对象并且测试成功,因为 request.user
是目前。
如何确保请求始终是 WSGIRequest
?
单元测试总是 运行 来自项目的根目录,无论是 Django manage.py 方法还是 pytest。请参阅 https://docs.djangoproject.com/en/4.0/topics/testing/overview/#running-tests-1。您可以灵活决定应执行哪个应用程序的测试套件或测试套件的一部分。
这是 settings.py
中的一个简单问题。我没有在我正在测试的应用程序和正在使用该应用程序的项目中添加相同的 context processors:context_processors.request
丢失。
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"context_processors": [
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
# list if you haven't customized them:
# ...
"django.template.context_processors.request", # <= this was missing
# ...
],
},
}
]
我正在开发一个 django 项目,为此我创建了一个在其他项目中使用的应用程序。应用程序和项目有自己的存储库和文件夹。
我想编写特定于该形式的应用程序的测试:
from django.test import TestCase
from django.urls import reverse
class SignUpTest(TestCase):
def test_my_signup_get2(self):
response = self.client.get(reverse('signup'))
self.assertEqual(response.status_code, 200)
当我运行从我的应用程序文件夹中进行此类测试时,生成的请求对象是一个空字符串,这将导致测试失败。在项目逻辑中,正在访问 request.user
,它不存在于字符串中。
当我 运行 从使用此应用程序的项目文件夹中进行完全相同的测试时,请求对象是一个 WSGIRequest
对象并且测试成功,因为 request.user
是目前。
如何确保请求始终是 WSGIRequest
?
单元测试总是 运行 来自项目的根目录,无论是 Django manage.py 方法还是 pytest。请参阅 https://docs.djangoproject.com/en/4.0/topics/testing/overview/#running-tests-1。您可以灵活决定应执行哪个应用程序的测试套件或测试套件的一部分。
这是 settings.py
中的一个简单问题。我没有在我正在测试的应用程序和正在使用该应用程序的项目中添加相同的 context processors:context_processors.request
丢失。
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"context_processors": [
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
# list if you haven't customized them:
# ...
"django.template.context_processors.request", # <= this was missing
# ...
],
},
}
]