How do I mock a django signal handler?

后端 未结 7 1629
走了就别回头了
走了就别回头了 2020-12-14 00:22

I have a signal_handler connected through a decorator, something like this very simple one:

@receiver(post_save, sender=User, 
          dispatch_uid=\'myfil         


        
7条回答
  •  孤城傲影
    2020-12-14 00:42

    You can mock a django signal by mocking the ModelSignal class at django.db.models.signals.py like this:

    @patch("django.db.models.signals.ModelSignal.send")
    def test_overwhelming(self, mocker_signal):
        obj = Object()
    

    That should do the trick. Note that this will mock ALL signals no matter which object you are using.

    If by any chance you use the mocker library instead, it can be done like this:

    from mocker import Mocker, ARGS, KWARGS
    
    def test_overwhelming(self):
        mocker = Mocker()
        # mock the post save signal
        msave = mocker.replace("django.db.models.signals")
        msave.post_save.send(KWARGS)
        mocker.count(0, None)
    
        with mocker:
            obj = Object()
    

    It's more lines but it works pretty well too :)

提交回复
热议问题