簡體   English   中英

測試 Django 視圖函數

[英]Testing Django View Functions

我目前正在嘗試為我在 views.py 中編寫的函數創建單元測試。 但是,我一直無法找到這樣做的正確方法。 例如,這是我到目前為止所擁有的:

視圖.py:

class SalesListView(LoginRequiredMixin, TemplateView):
    def get_month(self):
        if self.request.GET.get('month'):
            d = datetime.strptime(self.request.GET.get('month'), '%Y-%m')
        else:
            d = datetime.today()
        return d

我正在嘗試像這樣測試它:

測試.py:

class ViewFunctionsTests(TestCase):
    def test_saleslistview(self):
        self.request = Mock(session={'month': '2019-11'}, method='GET')
        view = SalesListView()
        self.assertEqual(view.get_month(), '2019-11')

但是,這會返回一個 AttributeError 說明: AttributeError: 'SalesListView' object has no attribute 'request'

有人對測試上述視圖功能的正確方法有什么建議嗎? 提前謝謝你。

來自 Django 文檔:

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

更多詳情: https : //docs.djangoproject.com/en/3.0/topics/testing/tools/

我通過使用 RequestFactory 庫找到了我正在尋找的解決方案。

class ViewFunctionsTests(TestCase):
    def test_saleslistview(self):
        request = RequestFactory().get('/sales/sales_dashboard/?month=2019-11')
        view = SalesListView()
        view.setup(request)
        self.assertEqual(view.get_month(), datetime.datetime(2019, 11, 1, 0, 0))

該請求需要您的模板的路徑。 希望這會有所幫助,如果您遇到和我一樣的問題。

暫無
暫無

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

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