使用Jest+TypeScript编写测试时定义函数报错
解决Jest运行TypeScript测试时的语法错误问题
你的TypeScript测试代码(简化版):
describe('Test function', () => { test('Arrow function', () => { const myFunction = (x: number) => x + 1 // 类型注解处报错 expect(myFunction(3)).toBe(4); }); });
运行Jest时出现语法错误,提示Unexpected token, expected ",",指向参数的类型注解x: number——这是因为Jest默认会把.ts文件当作普通JavaScript处理,而原生JS不支持TypeScript的类型注解语法。
结合你提到的补充信息:tsc编译正常、全局定义函数也报错、用function关键字定义带类型的函数同样报错,进一步确认问题出在Jest未配置TypeScript编译环节。
解决步骤:
安装必要依赖
确保项目已安装ts-jest(Jest的TypeScript预处理器)、@types/jest(Jest的类型定义)和typescript:npm install --save-dev ts-jest @types/jest typescript生成Jest的TypeScript配置文件
执行以下命令自动生成适配TS的Jest配置:npx ts-jest config:init执行后项目根目录会生成
jest.config.js,其中关键配置如下:module.exports = { preset: 'ts-jest', testEnvironment: 'node', };检查package.json的测试脚本
确保package.json中的test脚本指向Jest命令:{ "scripts": { "test": "jest" } }验证配置
直接运行测试命令:npm test此时Jest会通过
ts-jest先将TypeScript编译为JavaScript,再执行测试,类型注解不会再触发语法错误。
额外说明:
如果你的项目已有自定义tsconfig.json,可以在jest.config.js中指定其路径,确保编译规则一致:
module.exports = { preset: 'ts-jest', testEnvironment: 'node', "ts-jest": { tsconfig: "./tsconfig.test.json" // 替换为你的tsconfig路径 } };
内容的提问来源于stack exchange,提问作者Ettore Galli
相关产品推荐
相关产品推荐

