执行TypeScript单元测试时遇TS6196错误:类已声明但未使用
解决TypeScript单元测试中TS6196错误:类已声明但未使用
问题场景
编写TypeScript单元测试时,运行测试抛出如下错误:
TSError: ⨯ Unable to compile TypeScript:
test/hello-world-service.unit.test.ts(7,7): error TS6196: 'HelloWorldServiceUnitTests' is declared but never used.
即使在./test/tsconfig.json中设置noUnusedLocals: false,错误依然存在。相关配置及测试代码如下:
配置文件
./register.js
const tsNode = require('ts-node'); const testTSConfig = require('./test/tsconfig.json'); tsNode.register({ files: true, transpileOnly: true, project: './test/tsconfig.json' });
./mocharc.json
{ "require": "./register.js", "reporter": "dot" }
./nycrc.json
{ "extends": "@istanbuljs/nyc-config-typescript", "include": [ "src/**/*.ts" ], "exclude": [ "node_modules/" ], "extension": [ ".ts" ], "reporter": [ "text-summary", "html" ], "report-dir": "./coverage" }
测试代码
./test/hello-world-service.unit.test.ts
import {suite, test} from '@testdeck/mocha'; import * as _chai from 'chai'; _chai.should(); @suite class HelloWorldServiceUnitTests { // eslint-disable-next-line require-jsdoc @test 'should do something when call a method'() { const list = ['a', 'b', 'c']; console.log(list); } }
解决方案
方案1:确保测试目录的tsconfig.json配置正确并生效
- 检查
./test/tsconfig.json,确保包含以下配置(开启装饰器支持,关闭未使用变量检查):
{ "compilerOptions": { "target": "ES6", "module": "CommonJS", "strict": false, "noUnusedLocals": false, "noUnusedParameters": false, "experimentalDecorators": true, "emitDecoratorMetadata": true }, "include": ["**/*.ts"] }
- 修改
register.js,确保ts-node正确读取配置,可临时关闭快速编译验证配置生效:
const tsNode = require('ts-node'); tsNode.register({ files: true, transpileOnly: false, project: './test/tsconfig.json' });
方案2:在ts-node注册时直接覆盖TypeScript配置
如果上述方法无效,可在register.js中直接指定noUnusedLocals为false:
const tsNode = require('ts-node'); tsNode.register({ files: true, transpileOnly: true, project: './test/tsconfig.json', compilerOptions: { noUnusedLocals: false } });
方案3:临时"使用"测试类(仅作临时 workaround)
在测试文件末尾添加导出代码,让TypeScript认为类被使用:
export default HelloWorldServiceUnitTests;
原因分析
TypeScript无法识别@suite装饰器对测试类的"使用",因此触发未使用变量检查;同时可能存在ts-node未正确加载测试目录下的tsconfig.json配置,导致noUnusedLocals: false未生效。
内容的提问来源于stack exchange,提问作者vovahost
相关产品推荐
相关产品推荐

