Mocha运行TypeScript测试报TS2451块级变量重复声明错误
回答
完全可以在Mocha中创建多个包含相同声明语句的独立测试文件,你遇到的TS2451: Cannot redeclare block-scoped variable 'assert'报错和Mocha框架本身无关,是TypeScript的模块识别规则导致的编译错误。
报错根因
TypeScript默认规则下,不存在任何显式import/export语句的.ts文件会被判定为全局脚本,所有这类文件里的顶层声明都会被挂到同一个全局作用域下。你两个测试文件都在顶层声明了const assert = require('node:assert'),全局作用域下重复声明同名块级变量,就会触发重复声明的编译报错。
修复方法
任选一种方案即可解决:
- 方法1:给每个测试文件顶部加一行空导出语句,强制将文件标记为独立模块,每个文件的顶层变量会被隔离在自身模块作用域内,不会产生全局冲突
export {} const assert = require('node:assert') // 后续编写测试用例即可 - 方法2:将CommonJS风格的
require引入替换为ES模块风格的import写法,TypeScript会自动将包含import语句的文件识别为独立模块,天然实现作用域隔离import assert from 'node:assert' // 后续编写测试用例即可 - 方法3:修改
tsconfig.json的编译配置,添加moduleDetection: "force"项,强制TypeScript将所有.ts文件识别为独立模块,不需要给每个文件单独加标记{ "compilerOptions": { "target": "es2016", "module": "commonjs", // 保留你原有其他配置项 "moduleDetection": "force" } }
额外注意
你当前tsconfig的include配置匹配的是tests/**/*目录,但执行mocha测试的命令匹配的是./test/*.spec.ts路径,目录名test和tests不一致,后续可能出现类型检查无法覆盖测试文件的问题,建议核对实际目录名后统一配置。
内容的提问来源于stack exchange,提问作者salsan
相关产品推荐
相关产品推荐

