2012-02-03 14 views
4

ヘッダーがないかどうかをチェックするコードの単体テストを作成しようとしています。 Djangoのテストクライアントからhttp_refererヘッダー(またはそのヘッダー)を省略するにはどうすればいいですか?代わりに内蔵のテストクライアントを使用してのDjangoテストクライアント:httpヘッダーを削除する方法

def testCase(self): 
    response = self.client.get('/some_url/') 
    self.assertNotEqual(500, response.status_code) 

答えて

3

、あなたは、あなたの関数を呼び出す前にリクエストオブジェクトを変更し、あなたの要求を構築するためにDjango's RequestFactoryを使用することができます。

from django.test.client import RequestFactory 
from django.test import TestCase 

from yourapp.view import yourfunction 

class YourTest(TestCase) 
    def setUp(self): 
     self.factory = RequestFactory() 

    def testCase(self): 
     request = self.factory.get('/yoururl/') 
     del request.META['HTTP_REFERER'] 
     yourfunction(request) 
0

はテストを通過しないでくださいその場合、クライアント。テストクライアントの動作を変更してから要求を行う場合、実際に処理する必要がある入力に対してコードをテストしているわけではありません。

WSGIクライアントとまったく同じ方法で、HTTP要求を構築するためにテストクライアントを信頼するべきではありません。リクエストパラメータを表示するには十分な仕事がありますが、実際のリクエストから得られるものとは必ずしも同じではありません。

テストクライアントの目的は、実際のリクエストオブジェクトとレスポンスオブジェクトのすべての面倒な詳細からユーザを保護し、入力パラメータにビューがどのように応答するかをテストできるようにすることです。あなたの場合は、その詳細をテストする必要があります。

Djangoと同じようにHTTPRequestオブジェクトを構築する必要があります。作成する必要のあるDjango関数を多数使用してから、ビューまたはミドルウェアをHTTPRequestオブジェクトで直接呼び出します。ビューで例外が発生する場合は、assertRaisesを使用してテストしてください。ステータスコードが500に設定されたHTTPResponseを返す必要がある場合は、それをテストするか、必要に応じてカスタムアサートメソッドと一緒にテストします。

関連する問題