如何模拟 JEST 中 SUT 中使用的方法上使用的装饰器函数

Jer*_*zka 6 javascript typescript jestjs

我有一个打字稿课程:

\n\n
export class SystemUnderTest {\n\n  @LogThisAction('sth was done')\n  public doSomething() {} \n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,它使用反射来执行一些装饰函数:

\n\n
 export declare function LogThisAction(action: string): (target: any) => \n void;\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我运行测试时,我不关心实际的实现。这个装饰器函数,所以我尝试像这样模拟它:

\n\n
 myModule = require(./DecoratorFunctions);\n myModule.LogThisAction = jest.fn();\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这似乎不起作用。当我运行测试时我得到:

\n\n
\xe2\x97\x8f Test suite failed to run\nTypeError: decorator is not a function\nat DecorateProperty (node_modules/reflect-metadata/Reflect.js:553:33)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何在JEST框架中实现我的目标?

\n

nem*_*esv 8

从技术上讲,您的装饰器是一个返回另一个函数的函数。

所以你的模拟不正确,它应该返回一个函数,尝试使用:

myModule = require(./DecoratorFunctions);
myModule.LogThisAction = () => jest.fn();
Run Code Online (Sandbox Code Playgroud)

  • 当您在 TypeScript 中使用导入时,不适用于导入模式:( (2认同)