【发布时间】:2020-09-18 13:04:21
【问题描述】:
我正在测试我的网页 POST 功能之一。 if request.method == 'POST' 它会生成一个 pdf 并将其附加给用户。每次我运行测试时,我都会生成在我的 MEDIA 文件夹中建立的 pdf 文件,我不得不手动删除它们。我决定寻找防止这种情况发生的方法,在我看来最好的方法是用临时文件覆盖我的 MEDIA_ROOT。
我收到以下错误消息
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Acer\\AppData\\Local\\Temp\\profile_pics\\default.jpg'
我确定这是因为我必须在运行测试之前创建并登录用户(我不想在设置中执行此操作,因为我必须为不同的测试生成不同类型的用户)。每次创建用户时,他们的个人资料图片都会设置为 profile_pics\\default.jpg'。
我的理解是被嘲笑的MEDIA_ROOT是空的,不包含默认的个人资料图片,所以会抛出错误。
我的问题是如何规避这个问题(最好模拟 default.jpg 图像)?除了模拟 MEDIA_ROOT 文件夹之外,我还找到了其他解决方案,但它们看起来很老套,而且我更喜欢正确地做这件事,并希望从中吸取教训。
tests.py
from django.test import override_settings
import tempfile
@override_settings(MEDIA_ROOT=tempfile.gettempdir())
def test_redirects_after_POST(self):
user = User.objects.create_superuser('username')
self.client.force_login(user)
response = self.client.post(
reverse('final_question'), data={
'answer': 'this has me totally stumped'}
)
self.assertRedirects(response, reverse('page_2'))
谢谢。
【问题讨论】:
标签: django selenium django-testing django-tests