web-dev-qa-db-ja.com

Django単体テストでリクエストオブジェクトを取得する方法?

私は次のような機能を持っています

def getEvents(eid, request):
    ......

次に、上記の関数の単体テストを(ビューを呼び出さずに)書きたいと思います。したがって、TestCaseで上記をどのように呼び出す必要があります。リクエストを作成することは可能ですか?

47
user1003121

このソリューション を参照してください:

from Django.utils import unittest
from Django.test.client import RequestFactory

class SimpleTest(unittest.TestCase):
    def setUp(self):
        # Every test needs access to the request factory.
        self.factory = RequestFactory()

    def test_details(self):
        # Create an instance of a GET request.
        request = self.factory.get('/customer/details')

        # Test my_view() as if it were deployed at /customer/details
        response = my_view(request)
        self.assertEqual(response.status_code, 200)
80
Mariusz Jamro

Django=テストクライアント(from Django.test.client import Client)]を使用している場合、次のように応答オブジェクトからリクエストにアクセスできます。

from Django.test.client import Client

client = Client()
response = client.get(some_url)
request = response.wsgi_request

またはDjango.TestCasefrom Django.test import TestCase, SimpleTestCase, TransactionTestCase)を使用している場合は、self.clientと入力するだけで、任意のテストケースでクライアントインスタンスにアクセスできます。

response = self.client.get(some_url)
request = response.wsgi_request
25
Anton Manevskiy

RequestFactory を使用して、ダミーのリクエストを作成します。

11
Daniel Roseman

Djangoテストクライアントを使用できます

from Django.test import Client
c = Client()
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
response.status_code
response = c.get('/customer/details/')
response.content

詳細については
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#overview-and-a-quick-example

1
Sarath Ak

def getEvents(request, eid)という意味ですか?

Django unittestでは、from Django.test.client import Clientリクエストを作成します。

こちらをご覧ください: テストクライアント

@Secatorの答えは、非常に優れた単体テストのために本当に好まれるモックオブジェクトを作成するためです。ただし、目的によっては、Djangoのテストツールを使用する方が簡単な場合があります。

0
CppLearner