Nur*_*bek 6 python django unit-testing python-2.7 django-1.11
在单元测试中,我一开始创建了 3 个对象(文章)。测试完成后,我注意到文件夹中有 3 张图像media_root
。
问题:如何删除测试完成后创建的图像?
PS我尝试使用下一个代码,但它删除了media_root
文件夹。
def tearDown(self):
rmtree(settings.MEDIA_ROOT, ignore_errors=True)
Run Code Online (Sandbox Code Playgroud)
注意:方法test_article_form_valid
和中的问题test_article_crud
。
测试.py:
class ArticleTestCase(TestCase):
def setUp(self):
self.image = open(os.path.join(BASE_DIR, 'static/images/tests/image.jpg'), "r")
def test_article_form_valid(self):
data = {
'head': 'TEXT',
}
files_data = {
'image': SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
}
form = ArticleForm(data=data, files=files_data)
self.assertTrue(form.is_valid()) <-- ERROR
def test_article_crud(self):
response = self.client.get(reverse("article:article_create"))
self.assertEquals(response.status_code, 200)
response = self.client.post(
reverse("article:article_create"),
data={
'head': 'TEST',
'image': self.image
},
follow=True,
format='multipart'
)
self.assertEqual(response.status_code, 200)
self.assertEqual(Article.objects.all().count(), 1) <-- ERROR
def test_article_view(self):
first_article = Article.objects.create(
pk=150,
head='First',
image=SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
)
second_article = Article.objects.create(
pk=160,
head='Second',
image=SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
)
third_article = Article.objects.create(
pk=170,
head='Third',
image=SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
)
[***]
Run Code Online (Sandbox Code Playgroud)
错误:
FAIL: test_article_crud (article.tests.ArticleTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nurzhan/CA/article/tests.py", line 55, in test_article_crud
self.assertEqual(Article.objects.all().count(), 1)
AssertionError: 0 != 1
======================================================================
FAIL: test_article_form_valid (article.tests.ArticleTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nurzhan/CA/article/tests.py", line 117, in test_article_form_valid
self.assertTrue(form.is_valid())
AssertionError: False is not true
Run Code Online (Sandbox Code Playgroud)
Luc*_*mon 10
我找到了这篇文章,它对我有用
import shutil, tempfile
from django.test import TestCase, override_settings
MEDIA_ROOT = tempfile.mkdtemp()
@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class MeuPetTest(TestCase):
@classmethod
def tearDownClass(cls):
shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
super().tearDownClass()
Run Code Online (Sandbox Code Playgroud)
在python中使用模块,像在方法中tempfile
一样使用它,settings.MEDIA_ROOT
TestCase
setUp()
from django.conf import settings
import tempfile
def setUp(self):
settings.MEDIA_ROOT = tempfile.mkdtemp()
Run Code Online (Sandbox Code Playgroud)
然后,当测试完成时,测试中创建的文件将被自动删除。
更新:
那么,测试中创建的文件在测试结束时不会自动删除,所以测试结束后不要忘记删除临时目录。