如何测试打字稿中的修饰器用法?

时间:2018-10-11 04:32:47

标签: typescript unit-testing decorator

假设有一个属性装饰器,并且一个类在其某些属性上使用该装饰器。

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 }

应如何编写此测试?

P.S。 我将jestts-jest一起使用,并在需要时使用其他任何测试框架。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。

装饰器是要直接使用的,因此不能通过常规方式来嘲笑。 使用jest绕过模拟可能是合法的情况。

但是,IMO,测试目标放错了位置。 您不应该测试是否已经用{ opt1: true }调用了它,应该测试使用这种装饰器的行为

测试已用{ opt1: true }调用它与您要测试findLCD(a: number, b: number)以确保它已调用Math.abs(a)相同。

您应该关注行为(findLCD(a, b)为您提供正确的结果),而不是代码如何做到这一点。

这意味着,如果您的装饰器@foo执行了可测量的操作,请改为对此进行测试。

例如,如果@foo编写了一些日志条目,则找到一种方法来测试日志条目是否被写入,而不是以某种方式调用@foo