如何在打字稿中测试装饰器的使用?

Nan*_*gin 8 unit-testing decorator typescript

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

function foo(options?: any) {
    return function (target: any, prop: string) {
        // some magic
    }
}

class Bar {
    @foo({ opt1: true }) zoo = 123
}
Run Code Online (Sandbox Code Playgroud)

假设我已经foo在我的单元测试中涵盖了的逻辑,现在我愿意编写一个测试来确保

Barfoo在其属性上zoo使用了带有选项的装饰器{ opt1: true }

这个测试应该怎么写?

PS 我将jestts- jest一起使用,并在必要时向任何其他测试框架开放。

uni*_*nal 8

这是个有趣的问题。

装饰器旨在直接使用,因此不能通过正常方式进行模拟。这可能是使用jest绕过模拟的合法案例。

但是,IMO,您测试的目标放错了位置。您不应该测试它已被调用的事实,如果可能{ opt1: true },您应该测试使用此类装饰器的行为

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

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

意思是,如果您的装饰者@foo做了一些可衡量的事情,请对其进行测试。

例如,如果@foo写一些日志条目,想办法测试日志条目是否被写入,而不@foo是以某种方式被调用。