如何在 Django 中测试上传文件

How to test uploadfile in django

我有一个上传表单,我想测试一下。但是有一个问题。

def test_if_can_upload_file(self):
    with open('app_blog/tests/test.txt') as file:
        self.client.post(reverse('csv_blog'), {'attachment': file})
        test_file = file.read()
        self.assertEqual(test_file, 'test file')

我测试的时候报错:

self.assertEqual(test_file, 'test file')
AssertionError: '' != 'test file'
+ test file

为什么我的文件显示为空?其实不是 empty.Or 可能我测试表格的方式不对?

形式

class UploadBlogForm(forms.ModelForm):
    file = forms.FileField()

    class Meta:
        model = Blog
        fields = 'file',

查看

def upload_blog(request):
    if request.method == "POST":
        upload_file_form = UploadBlogForm(request.POST, request.FILES)
        if upload_file_form.is_valid():
            blog_file = upload_file_form.cleaned_data['file'].read()
            blog_str = blog_file.decode('utf-8').split('\n')
            csv_reader = reader(blog_str, delimiter=":::", quotechar='"')

您的 self.client.post(…) 已经 耗尽 文件处理程序并读取文件的全部内容,因此这意味着当您调用 file.read() 时,光标已经移动到文件末尾,因此 returns 一个空字符串。

您应该重新打开文件并从头读取文件,因此:

def test_if_can_upload_file(self):
    with open('app_blog/tests/test.txt') as file:
        self.client.post(reverse('csv_blog'), {'attachment': file})
    with open('app_blog/tests/test.txt') as <strong>file</strong>:
        test_file = <strong>file</strong>.read()
        self.assertEqual(test_file, 'test file')