Django 中测试信号的基础知识
Basics of testing signals in Django
我是 Django 测试的新手,我想知道如何为 signals.
编写测试
我查看了文档,但找不到任何有用的信息。
假设 Reservation
模型有一个简单的 pre_save
信号,我想在将其保存到数据库之前更改某些属性。
我的代码如下所示:
@receiver(pre_save, sender=Reservation)
def set_destination_type(sender, instance, *args, **kwargs):
points = ['New York', 'Rome', 'Paris']
if instance.destination in points:
instance.international = True
instance.international = False
我将如何处理这个问题?我是否只是创建一个保留并断言设置了正确的值?我是否单独测试此功能?真不知道怎么下手。
谢谢!
最简单的确实是创建一些预订(有些目的地有积分,有些没有),将目的地设置为 'foo'(例如)然后保存它们。
international 似乎是一个布尔值字段,因此使用 'foo'(这不是布尔值)并保存将允许您检查这两种情况(并且就实例而言不是 validated/saved可以分配任何你想要的值)
"Do I test this function in isolation" => 我不会那样做,信号框架与 Django 模型紧密耦合,要获得隔离,您将不得不模拟大量库,使您的测试代码比测试代码本身
我是 Django 测试的新手,我想知道如何为 signals.
编写测试
我查看了文档,但找不到任何有用的信息。
假设 Reservation
模型有一个简单的 pre_save
信号,我想在将其保存到数据库之前更改某些属性。
我的代码如下所示:
@receiver(pre_save, sender=Reservation)
def set_destination_type(sender, instance, *args, **kwargs):
points = ['New York', 'Rome', 'Paris']
if instance.destination in points:
instance.international = True
instance.international = False
我将如何处理这个问题?我是否只是创建一个保留并断言设置了正确的值?我是否单独测试此功能?真不知道怎么下手。
谢谢!
最简单的确实是创建一些预订(有些目的地有积分,有些没有),将目的地设置为 'foo'(例如)然后保存它们。
international 似乎是一个布尔值字段,因此使用 'foo'(这不是布尔值)并保存将允许您检查这两种情况(并且就实例而言不是 validated/saved可以分配任何你想要的值)
"Do I test this function in isolation" => 我不会那样做,信号框架与 Django 模型紧密耦合,要获得隔离,您将不得不模拟大量库,使您的测试代码比测试代码本身