Django 测试,断言 CSV 内容存在

aak*_*ngh 3 python django django-testing django-tests

我正在做一个测试来检查文件的内容,csv使用assertContains()

response = client.get('/abc/1/a_b_csv')
print(response.content)
self.assertContains(response.content, 'aakash')
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的选项,self.assertContains(response,'aakash') 但没有得到任何结果。

我的 csv 文件看起来像,

Name Age
Aakash 22
Run Code Online (Sandbox Code Playgroud)

有时会出现这样的错误:

bName\r\nVipul\r\n'
E
======================================================================
ERROR: test_csv (timepay.new_test.ReportTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/aakash/Projects/test.py", line 28, in test_csv
    self.assertNotContains(response.content, 'Vipul')
  File "/home/aakash/Projects/project_env/lib/python3.6/site-packages/django/test/testcases.py", line 402, in assertNotContains
    response, text, status_code, msg_prefix, html)
  File "/home/vipul/Projects/project_env/lib/python3.6/site-packages/django/test/testcases.py", line 355, in _assert_contains
    response.status_code, status_code,
AttributeError: 'bytes' object has no attribute 'status_code'
Run Code Online (Sandbox Code Playgroud)

Ral*_*alf 5

查看您添加到问题中的堆栈跟踪,该堆栈跟踪对应于对self.assertNotContains(response.content, 'Vipul').

查看 的文档SimpleTestCase.assertNotContains(),我注意到该方法需要整个响应,而不仅仅是内容作为参数。

所以,改变这一行:

self.assertNotContains(response.content, 'Vipul')
Run Code Online (Sandbox Code Playgroud)

对此

self.assertNotContains(response, 'Vipul')
Run Code Online (Sandbox Code Playgroud)

应该清除您添加堆栈跟踪的错误。


现在,我注意到您的问题中也有这一行:

我尝试了不同的选项,例如self.assertContains(response,'aakash'),但没有得到任何结果。

"didn't get any result"如果您希望我们能够帮助您,您必须更具体地说明您的意思。