使用测试模拟忽略Django信号
我有一个函数设置来钩住模型上的使用测试模拟忽略Django信号,django,django-models,Django,Django Models,我有一个函数设置来钩住模型上的pre_delete,我想在使用unittest.mock.patch进行测试时忽略它,但这只在我使用来自Django的信号名称或通过dispatch\u uid将其断开时起作用 原型看起来像: @receiver(pre_delete, sender=MyModel, dispatch_uid="pre_delete_my_model") def pre_delete_my_model(sender, instance, *args, **kw
pre_delete
,我想在使用unittest.mock.patch
进行测试时忽略它,但这只在我使用来自Django的信号名称或通过dispatch\u uid
将其断开时起作用
原型看起来像:
@receiver(pre_delete, sender=MyModel, dispatch_uid="pre_delete_my_model")
def pre_delete_my_model(sender, instance, *args, **kwargs):
...
在我的测试中,这是有效的:
@patch("django.db.models.signals.pre_delete")
def test_something_that_triggers_pre_delete(self, pre_delete_mock):
...
但我想要更明确一点的,例如
@patch("my_app.signals.pre_delete_my_model")
def test_something_that_triggers_pre_delete(self, pre_delete_mock):
...
但这不起作用,我想,因为这不是被激发的信号,它只是被设置为接收它。我发现了一种使用pre_delete.disconnect(…)
的方法,但我是一个讨厌的人,不喜欢那些在我测试中传播的调用的方式
有没有一种方法可以做到这一点,这样它就可以在装饰器中使用特定于模型或处理程序的东西