大容量のファイル(今回は200MBくらい)をPOSTした時に正しくバリデーションではじかれるかのテストがしたかった。
したかったんだけど、実際に200MBほどのファイルを使ってテストしようとしたらMemoryError
って怒られちゃった。
ダミーデータみたいなのが作れる!
どうしたもんかと思ってたら、TemporaryUploadedFileってのがあるらしい。
test.py
from django.core.files.uploadedfile import TemporaryUploadedFile
from django.test import TestCase
# 中略
class TestClass(TestCase):
def test_testfunction(self):
form_data = {
'upload_file': TemporaryUploadedFile("test.csv", "csv", 214958080, "utf8")
}
response = self.client.post('/test/path/', form_data)
self.assertEqual(302, response.status_code, "ちゃんとリダイレクトしなかったぞ")
だいぶ端折ってるけどこんな感じにつかえるみたい。
引数3つ目で容量をb単位で指定できる。今回は200MBを少し超えるくらいの値を入れてる。
(桁は1024で変わるよ。1000じゃないことに注意。)
まとめ
めっちゃ短いけど、備忘録的な意味ではいいのかな。
ちなみに、少量データだったらInMemoryUploadedFile
ってのもあるらしい。
参考
https://docs.djangoproject.com/ja/3.0/_modules/django/core/files/uploadedfile/