簡體   English   中英

為Django View get_context_data()方法編寫測試

[英]Writing a test for a Django View get_context_data() method

我正在為View編寫測試,我在其中更新上下文以將其他信息傳遞給模板。

問題

在編寫測試時,我無法從RequestFactory訪問上下文。

視圖

class PlanListView(HasBillingRightsMixin, ListView):
    """Show the Plans for user to select."""

    headline = "Select a Plan"
    model = Plan
    template_name = "billing/plan_list.html"

    def get_context_data(self, *args, **kwargs):
        context = super(PlanListView, self).get_context_data(**kwargs)
        context.update({
            "customer": self.get_customer()
        })
        return context

測試

class TestPlanListView(BaseTestBilling):

    def setUp(self):
        super(TestPlanListView, self).setUp()
        request = self.factory.get('billing:plan_list')
        request.user = self.user
        request.company_uuid = self.user.company_uuid

        self.view = PlanListView()
        self.view.request = request
        self.response = PlanListView.as_view()(request)

    def test_get_context_data(self, **kwargs):
        context = super(self.view, self).get_context_data(**kwargs)
        context.update({"customer": self.view.get_customer()})
        self.assertEqual(
            self.view.get_context_data(),
            context
        )

如何測試視圖的get_context_data()方法?

使用測試客戶端可以訪問您的上下文。

def test_context(self):
    # GET response using the test client.
    response = self.client.get('/list/ofitems/')
    # response.context['your_context']
    self.assertIsNone(response.context['page_obj'])
    self.assertIsNone(response.context['customer']) # or whatever assertion.
    .....

如果您不想測試完整的瀏覽器行為,則可以使用RequestFactory 此工廠提供了一個可以傳遞給視圖的請求實例。 在我的情況下的好處是,我可以將單個視圖功能測試為黑盒子,具有完全已知的輸入,測試特定輸出。 正如文檔中所述。

class TestView(TemplateView):
    template_name = 'base.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context = {'1': 11337}
        return context

# ...
def test_context(self):
    factory = RequestFactory()
    request = factory.get('/customer/details')
    response = TestView.as_view()(request)
    self.assertIsInstance(response.context_data, dict)
    self.assertEqual(response.context_data['1'], 1337)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM