在Django中测试put方法

时间:2011-11-12 00:53:28

标签: python django put django-testing

我正在测试我的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对象)发送的实际有效负载是我想要在我的视图中测试的代码?

2 个答案:

答案 0 :(得分:0)

实际上,实现此目的的方法是使用raw_post_data函数。这是一种耻辱,因为据我所知,这打破了REST模型。但是,嘿,它有效。

我基本上改变了:

payload = request.readlines()

为:

   payload = request.raw_post_data

在我看来。

答案 1 :(得分:0)

我会提醒您不要因为这样的测试错误而攻击您的生产代码。它几乎总是意味着你做错了什么,你应该修复。在我的例子中,这个错误的原因是使用请求对象初始化表单,而不是request.POST或request.GET。如果您仍然遇到此错误(我们希望不要......),请重新检查表单初始化或在此处发布。