在 Django FormView基于类的视图中测试 contrib.messages

问题描述

该视图是一个 FormView。如果存在任何验证问题,则返回同一个模板以及来自 contrib.messages 的消息。我只想构建一个测试,检查此消息是否正确呈现。我已经阅读了关于 RequestFactory、Client、Mock、Middleware 的内容,但我无法在 CBV FormView 中实现这个测试。我也尝试过 get_messages 和其他东西。

查看:

class MyView(FormView):

    form_class = MyForm
    template_name = 'app/welcome_template.html'
    
    def form_valid(self,form):
        form_data = form.cleaned_data
        auth = LDAPBackend() 
        user = auth.authenticate(self.request,username=form_data['login_field'],password=form_data['password_field'])
                

        if user:
           return super(MyView,self).form_valid(form)
        else:
            messages.add_message(self.request,messages.WARNING,'some warning' + str(form_data['other_field']))
            return self.form_invalid(form)

测试尝试:

这个测试总是打印空列表。

from django.test import TestCase,RequestFactory,Client
from django.urls import reverse
from .views import MyView
from caf.settings import V_USER,V_PWD
from django.contrib.messages import get_messages

class MyViewTestCase(TestCase):

    def setUp(self):
        self.factory = RequestFactory()
        self.client = Client()

    def test_message(self):

        input_data = {'login_field': V_USER,'password_field': V_PWD,'other_field': 'other...'}
        
        request = self.factory.post(reverse('app:welcome_template'),data=input_data,follow=True)
        response = MyView.as_view()(request)

        print(len(get_messages(response.wsgi_request)))
        print(len(response.context['messages']))

我将不胜感激。

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)