gpt4 book ai didi

django - 使用图像对 Django 模型进行单元测试 - 不太了解 SimpleUploadedFile

转载 作者:行者123 更新时间:2023-12-05 03:50:17 26 4
gpt4 key购买 nike

我是一个测试新手,我正在尝试弄清楚如何编写测试以确认模型表单有效并将生成 Post 的新实例,这是一个模型有一个图像字段。

我看了some other所以帖子,看起来我应该使用 SimpleUploadedFile 来模拟图像字段。我很难理解 SimpleUploadedFile 的工作原理(还没有找到任何关于此应用程序的直接文档),并且不同的 SO 帖子使用一些不同的语法。

我应该指向保存在我的 Django 应用程序某处的实际图像的真实文件路径,还是创建一个要使用的假文件?

测试.py

class CreatePost(TestCase):
def test_create_post(self):
data = {
"content": "This is a post, I'm testing it out"
}
files_data = {
"image": SimpleUploadedFile(name='test_image.jpg', content=open(image_path, 'rb').read(), content_type='image/jpeg')
}
response = self.client.post("/new", data=data, files=files_data)
self.assertEqual(Post.objects.count(),1)
self.assertRedirects(response, 'index')

模型.py

class Post(models.Model):
content = models.CharField(max_length=260)
timestamp = models.DateTimeField(auto_now_add=True)
posted_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name="posts")
liked_by = models.ManyToManyField(User, blank=True, related_name="liked_posts")
image = models.ImageField(upload_to='uploads/', verbose_name='image')
def __str__(self):
return f"{self.posted_by} posted {self.content} at {self.timestamp}"
def is_valid_post(self):
return len(self.content) <= 260 and len(self.content) >= 0


class Post_form(ModelForm):
class Meta:
model = Post
fields = ['content', 'image']

最佳答案

I'm having a hard time understanding how SimpleUploadedFile works (haven't found any straightforward documentation for this application)

看看source code SimpleUploadedFile — 它是文件的简单表示,其中只有内容、大小和名称。

您不需要指向真实图像的真实文件(除非您愿意)。因此,您可以将真实图像(在您的示例中 — open(image_path, 'rb').read())替换为假数据甚至空二进制数据 b''

还将所有请求字段放在单个数据对象下。

而且我在您的示例中没有找到 client 的初始化。

总结一下,你的测试最终会像这个一样:

from django.test import Client, TestCase

class CreatePost(TestCase):
def setUp(self):
self.client = Client()

def test_create_post(self):
data = {
"content": "This is a post, I'm testing it out",
"image": SimpleUploadedFile(name='test_image.jpg', content=b'', content_type='image/jpeg')
}
response = self.client.post("/new", data=data)

self.assertEqual(Post.objects.count(),1)
self.assertRedirects(response, 'index')

关于django - 使用图像对 Django 模型进行单元测试 - 不太了解 SimpleUploadedFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63476979/

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