在Django中测试put方法
我在测试我的Django应用中的PUT方法。但是,当我调用:
payload = '{server_lib_song_id : -1, host_lib_song_id : ' + str(lib_id) + \
', song : "' + song + '", artist : "' + artist + '" , album : "' + \
album +'"}'
response = client.put('/udj/users/' + user_id + '/library/song', \
data=payload, content_type='text/json', \
**{'udj_ticket_hash' : ticket_hash})
在我的测试中,我在视图里遇到了以下错误:
AttributeError: 'FakePayload' object has no attribute 'readline'
导致这个错误的代码行是:
payload = request.readlines()
那么,我该如何确保我发送的实际数据(不是一个假数据对象)能够到达我在视图中想要测试的代码呢?
2 个回答
0
我建议不要为了测试这种错误而去修改你的生产代码。这通常意味着你做错了什么,应该去修正。在我的情况下,这个错误的原因是用请求对象来初始化表单,而不是用 request.POST 或 request.GET。如果你还在遇到这个错误(希望不是……),那就重新检查一下你的表单初始化,或者把它发到这里来。
1
其实要解决这个问题,可以使用 raw_post_data
这个函数。虽然这样做有点遗憾,因为我觉得这会破坏REST模型,但没关系,它确实能奏效。
我基本上把:
payload = request.readlines()
改成了:
payload = request.raw_post_data
在我的视图里。