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


参考)
http://docs.djangoproject.com/en/dev/topics/testing/