1

API をテストするための単体テストを作成しました....GET 呼び出しです....実行すると、このエラーが発生します...トレースバックが表示されます....

Traceback (most recent call last):
  File "/home/arindam31/XXX-Name/mapi/tests.py", line 141, in test_get_cities
    response = self.cl.get('/mapi/latest/cities/')
  File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 445, in get
    response = super(Client, self).get(path, data=data, **extra)
  File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 229, in get
    return self.request(**r)
  File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 387, in request
    response = self.handler(environ)
  File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 84, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 218, in handle_uncaught_exception
    return callback(request, **param_dict)
  File "/home/arindam31/XXX-Name/saul/views.py", line 546, in do_handle_500
    return render_to_response("500.html", context_instance=RequestContext(request))
  File "/usr/local/lib/python2.7/dist-packages/django/template/context.py", line 177, in __init__
    self.update(processor(request))
  File "/home/arindam31/XXX-Name/saul/context_processors.py", line 46, in common_context
    ret_dict['city'] = request.city
AttributeError: 'WSGIRequest' object has no attribute 'city'

これが私の単体テストです...

def test_get_cities(self):
    request = HttpRequest()
    request.city = self.c1
    response = self.cl.get('/mapi/latest/cities/')
    content = response.content
    data = json.loads(content)
    for city in City.objects.all():
        assert city.name in data
        assert data[city.name] == city.pk

ここで、self.c1 は setUp 部分の都市型オブジェクトです。HttpRequest は django.http からのものです。

テスト中のビューは次のとおりです。

def get_cities(request): 
    print "1"
    if ENABLE_HTTPS_CHECK and not request.is_secure():
        return HttpResponseForbidden()
    if request.method != 'GET':
        return HttpResponseNotAllowed('Not allowed')
    city_map = _get_city_map()
    response = HttpResponse(json.dumps(city_map)
    content_type='application/json')
    response['Cache-Control'] = 'no-cache'
    return response
4

2 に答える 2

-1

あなたがここで何をしようとしているのか、私にはわかりません。リクエスト オブジェクトをインスタンス化し、city 属性を割り当ててから、そのオブジェクトを無視し、標準のテスト クライアントを使用します。そのリクエストがクライアントの取得に使用されると考える理由がわかりません。

正直なところ、あなたのデザイン全体が壊れていると思います。通常のテスト以外のシナリオでパラメーターをリクエストに取得する方法は示されていませんが、通常は、何らかの方法でリクエストに注釈を付けるのではなく、POST または GET パラメーターを介して渡します。クライアント呼び出しにディクショナリを渡すだけでよいため、もちろんテストが容易になります。

于 2013-03-01T09:11:24.070 に答える