我正在测试我的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()
那么如何确保我使用put请求(而不是FakePayload对象)发送的实际有效负载是我想要在我的视图中测试的代码?
答案 0 :(得分:0)
实际上,实现此目的的方法是使用raw_post_data
函数。这是一种耻辱,因为据我所知,这打破了REST模型。但是,嘿,它有效。
我基本上改变了:
payload = request.readlines()
为:
payload = request.raw_post_data
在我看来。
答案 1 :(得分:0)
我会提醒您不要因为这样的测试错误而攻击您的生产代码。它几乎总是意味着你做错了什么,你应该修复。在我的例子中,这个错误的原因是使用请求对象初始化表单,而不是request.POST或request.GET。如果您仍然遇到此错误(我们希望不要......),请重新检查表单初始化或在此处发布。