2017-09-18 8 views
1

ユニットテストでは、最初に3つのオブジェクト(記事)を作成します。テストが完了した後、私はmedia_rootフォルダに3つの画像があることに気付きました。単体テスト後の画像ファイルの削除方法は?

質問:テスト終了後に作成された画像を削除するにはどうしたらいいですか?

P.S.次のコードを使用しようとしましたが、media_rootフォルダーを削除しました。

def tearDown(self): 
     rmtree(settings.MEDIA_ROOT, ignore_errors=True) 

注:メソッドtest_article_form_validtest_article_crudの問題点。

tests.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' 
      ) 
     ) 
     [***] 

ERROR:Pythonで

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 

答えて

1

使用tempfileモジュール、TestCasesetUp()方法でsettings.MEDIA_ROOTとしてそれを使用し、

from django.conf import settings 
import tempfile 

def setUp(self): 
    settings.MEDIA_ROOT = tempfile.mkdtemp() 

次に、テストが完了すると、テストで作成されたファイルが自動的に削除されます。

+0

しかし、OPはディレクトリを保持したいだけで、その中からファイルを削除すると思います。 – SiHa

+0

@SiHa絶対に正しい!私は私のテストで作成されたイメージファイルのみを削除する必要があります。フォルダに触れないでください。他のアイデアはありますか? –

+0

テストのポイントは、実際のデータベースやテストに影響を与えずに特定の機能を模擬することです。 'tempfile'モジュールを使用する場合は、実際のイメージオブジェクトを作成する必要はありませんが、それらのモックを作成し、テストした後、オブジェクトは自動的に削除されます。ファイルの削除についての質問は発生しません。ファイルは作成されず、実行時に作成され破棄されます。 – zaidfazil

関連する問題