我正在创建一个将接受用户内容的django项目,在开发过程中,我试图创建一个测试用例,以测试模型是否正常上传。
我的文件结构如下:
Site
|----temp
| |----django-test
|----app
|----test_image.jpg
|----test_manual.pdf
|----tests.py
我的测试用例代码如下:
from django.test import TestCase, override_settings
from django.core.files import File
import sys
import os
from .models import Manual
# Create your tests here.
class ManualModelTests(TestCase):
@override_settings(MEDIA_ROOT='/tmp/django_test')
def test_normal_manual_upload(self):
in_image = open(os.path.join('manuals','test_image.jpg'), 'r+b')
in_pdf = open(os.path.join('manuals','test_manual.pdf'), 'r+b')
thumbnail = File(in_image)
in_manual = File(in_pdf)
new_manual = Manual.objects.create(
photo=thumbnail,
manual=in_manual,
make='yoshimura',
model='001',
year_min=2007,
year_max=2010
)
#uploaded_image = open(os.path.join('temp','django_test','images','test_image.jpg'), 'r+b')
#uploaded_pdf = open(os.path.join('temp','django_test','manuals','test_manual.pdf'), 'r+b') #self.assertIs(open(), in_image)
#self.assertIs(uploaded_img, in_image)
#self.assertIs(uploaded_pdf, in_pdf)
这是型号代码:
class Manual(models.Model):
photo = models.ImageField(upload_to="photos")
make = models.CharField(max_length=50)
model = models.CharField(max_length=100)
manual = models.FileField(upload_to="manuals")
year_min = models.PositiveIntegerField(default=0)
year_max = models.PositiveIntegerField(default=0)
由于某种原因,打开“ test_image.jpg”时出现FileNotFound)。我的问题是
答案 0 :(得分:1)
您得到一个FileNotFoundError
,因为open
会尝试查找相对于当前工作目录(可能是Site
)的文件。
最好使用__file__
,使用相对于测试模块本身的路径打开文件,因为这并不取决于当前的工作目录。例如:
open(os.path.join(os.path.dirname(__file__), 'test_image.jpg'), 'r+b')
对于断言,仅测试上传文件的存在可能是最简单的。如果存在,则上载必须已经生效。例如:
self.assertTrue(os.path.exists('/tmp/django_test/test_image.jpg'))
您还应该在测试中添加tearDown()
方法,以便在测试完成后删除上传的文件。
def tearDown(self):
try:
os.remove('/tmp/django_test/test_image.jpg')
except FileNotFoundError:
pass