Djangoでファイルのアップロードをテストする
POSTで画像アップロードがあるフォームのテストを書く方法を調べる機会があったのでメモしておく
from django.test import TestCase class UploadTest(TestCase): def test_upload(self): with open('test.jpg') as f: res = self.client.post('images/upload/', {'title': 'test_image', 'image': f}) self.failUnlessEqual(res.status_code, 200)
このように、ファイルハンドラをそのままpostにdataとして渡すことでうまくいきました。
ついでにちょっとpostメソッドの中身を見てみると、content_typeはデフォルトでmultipartなのがわかります
def post(self, path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra): """ Requests a response from the server using POST. """ response = super(Client, self).post(path, data=data, content_type=content_type, **extra) if follow: response = self._handle_redirects(response, **extra) return response