如何在Django中测试文件响应?

10

我有一个生成并返回CSV文件的API:

def getCSV():
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename=export.csv'
    writer = csv.writer(response, csv.excel)

    # ... Write some CSV content ...

    return response

当我从浏览器中调用时,它可以很好地工作,但我无法想出如何编写一个调用API并检查CSV内容是否正确的测试。

如果我:

c = Client()
r = c.get('/my/export/api')
print(r.content)

那个只打印三个字节的代码很可能在概念上完全错误。

我怎样才能在我的测试中获取CSV文件响应的内容?


1个回答

17

如何读取Django的CSV HTTP响应

import csv
import io

def test_csv_export(self):

    response = self.client.get('/my/export/api')
    self.assertEqual(response.status_code, 200)

    content = response.content.decode('utf-8')
    cvs_reader = csv.reader(io.StringIO(content))
    body = list(cvs_reader)
    headers = body.pop(0)

    print(body)
    print(headers)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接