假设有一个属性装饰器,并且一个类在其某些属性上使用该装饰器。
function foo(options?: any) {
return function (target: any, prop: string) {
// some magic
}
}
class Bar {
@foo({ opt1: true }) zoo = 123
}
假设我已经在单元测试中介绍了foo
的逻辑,现在愿意编写一个测试来确保
Bar
类在其属性foo
上使用了zoo
装饰器,并带有选项{ opt1: true }
应如何编写此测试?
答案 0 :(得分:1)
这是一个有趣的问题。
装饰器是要直接使用的,因此不能通过常规方式来嘲笑。
使用jest
绕过模拟可能是合法的情况。
但是,IMO,测试目标放错了位置。
您不应该测试是否已经用{ opt1: true }
调用了它,应该测试使用这种装饰器的行为。
测试已用{ opt1: true }
调用它与您要测试findLCD(a: number, b: number)
以确保它已调用Math.abs(a)
相同。
您应该关注行为(findLCD(a, b)
为您提供正确的结果),而不是代码如何做到这一点。
这意味着,如果您的装饰器@foo
执行了可测量的操作,请改为对此进行测试。
例如,如果@foo
编写了一些日志条目,则找到一种方法来测试日志条目是否被写入,而不是以某种方式调用@foo
。