2017-11-01 18 views
1

と機能のためのDjangoのユニットテストを書く:私は</strong>キーはJSONデータである<strong>テレビ放送は、(私のviews.pyで)この機能で返されるかどうかを確認するためにユニットテストを書いているのHttpResponse

def my_function(request, date1='', date2='', date3='', date4=''): 
    ::some other functions...:: 
    return HttpResponse(data, content_type='application/json') 

見ての通り、私は確認したいJSONをフロントエンドで受信し、このJSONデータは、同様に構成されている変数データ

としてはHttpResponseを経由して送信されます。

{"records": [ {"program": "WWE ENTERTAINMENT", "telecasts": 201,...}, {..} ] 

これは、私はユニットテストを書くことをしようとしている方法ですが、私はそれを実行すると、私はエラーを取得しています:

def my_test(self): 
    """Data returned has telecasts key""" 

    request = self.client.get(
     '/apps/myapp/2014-08-01/2015-06-10/2016-01-13/2016-03-23/', 
     {dictionary of optional parameters} 
    ) 

    force_authenticate(request, user=self.user) 

    response = my_function(
     request, 
     '2014-08-01', 
     '2015-06-10', 
     '2016-01-13', 
     '2016-03-23' 
    ) 

    telecasts_check = response['records'][0]['telecasts'] 
    self.assertRaises(KeyError, lambda: telecasts_check) 
+0

を。リクエストを作成していないので、テストクライアント経由で実際のビュー*を呼び出しています。だから、もしあなたがそれを使っているなら、あなたのように直接関数を呼び出すことによって '応答'を得る必要はありません。 –

答えて

2

Daniel Rosemanが既にself.client.getが要求を行うと返し、指摘されたように応答のために、myfunctionに直接電話するのはまったく必要ありません。

また、HttpResponseには、応答コンテンツを格納するバイトテキストまたは反復子にすることができるcontentという名前のプロパティがあります。あなたのケースでは

、あなたはjson.loadsを使用して辞書にそれを変換し、あなたがすでにやっているだけのような任意の値にアクセスすることができます:あなたはself.client.get`が何をするか `について混乱思える

import json 

def my_test(self): 
    ... 
    response = self.client.get(...) 
    result = json.loads(response.content) 
    telecasts_check = result['records'][0]['telecasts'] 
    ... 
関連する問題

 関連する問題