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

标签 javascript typescript jestjs

我有一个 typescript 类:

export class SystemUnderTest {

  @LogThisAction('sth was done')
  public doSomething() {} 

}

如您所见,它使用反射来执行一些装饰功能:

 export declare function LogThisAction(action: string): (target: any) => 
 void;

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

 myModule = require(./DecoratorFunctions);
 myModule.LogThisAction = jest.fn();

但这似乎行不通。当我运行测试时,我得到:

● Test suite failed to run
TypeError: decorator is not a function
at DecorateProperty (node_modules/reflect-metadata/Reflect.js:553:33)

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

最佳答案

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

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

myModule = require(./DecoratorFunctions);
myModule.LogThisAction = () => jest.fn();

关于javascript - 如何模拟 JEST 中 SUT 中使用的方法上使用的装饰器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53960426/

相关文章:

Javascript/Angular httpClient 从 url 获取数据并传递外部方法

typescript - Vue 3 + Vite + Typescript - 开发和构建没有发现 TS 错误

unit-testing - 使用 jest.mock 和 TypeScript 而无需困惑的类型转换?

reactjs - Jest 快照不匹配 - Windows 与 Unix/Linux 行尾

javascript - ExtJS - 复杂表单序列化

javascript:下载的文件大小与内容长度不同

用于将鼠标悬停在一张图片上以在固定位置显示另一张带有描述的 Javascript

javascript - forEach 循环中的 jQuery 动画

javascript - 如何解决 setAttribute() 函数中 'boolean' 类型的参数不可分配给 'string' 类型的参数错误

javascript - 当发生未捕获的 Promise 拒绝时,我如何在 Jest 中通过测试失败?