Why don't my Django unittests know that MessageMiddleware is installed?

前端 未结 9 714
傲寒
傲寒 2020-12-14 05:54

I\'m working on a Django project and am writing unittests for it. However, in a test, when I try and log a user in, I get this error:

MessageFailure: You can         


        
9条回答
  •  天涯浪人
    2020-12-14 06:40

    A way to solve this quite elegant is to mock the messages module using mock

    Say you have a class based view named FooView in app named myapp

    from django.contrib import messages
    from django.views.generic import TemplateView
    
    class FooView(TemplateView):
        def post(self, request, *args, **kwargs):
            ...
            messages.add_message(request, messages.SUCCESS, '\o/ Profit \o/')
            ...
    

    You now can test it with

    def test_successful_post(self):
        mock_messages = patch('myapp.views.FooView.messages').start()
        mock_messages.SUCCESS = success = 'super duper'
        request = self.rf.post('/', {})
        view = FooView.as_view()
        response = view(request)
        msg = _(u'\o/ Profit \o/')
        mock_messages.add_message.assert_called_with(request, success, msg)
    

提交回复
热议问题