Jest处理Redis相关单元测试时出现Reflect.getMetadata错误如何解决
问题原因
TypeError: Reflect.getMetadata is not a function 报错的核心是Jest运行环境缺少装饰器依赖的元数据polyfill,你的项目用到了基于装饰器的依赖注入能力(如NestJS、TypeDI等框架的注入能力),运行单测时没有提前注入Reflect的元数据处理能力。
解决方案
- 首先安装
reflect-metadata依赖:
npm install reflect-metadata --save # 或使用yarn yarn add reflect-metadata
- 调整Jest配置,在jest.config.js(或对应配置文件)的setupFiles配置项中引入reflect-metadata:
module.exports = { // 其他原有配置保留 setupFiles: ['reflect-metadata'], }
- 如果配置后仍然报错,在你的测试入口文件或者所有用到依赖注入的测试文件最顶部,第一行添加引入代码:
import 'reflect-metadata'
- 如果是TypeScript项目,额外检查tsconfig.json是否开启了装饰器相关配置:
{ "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true, // 其他原有配置保留 } }
内容的提问来源于stack exchange,提问作者Sanjeev Rai
相关产品推荐
相关产品推荐

