我正在尝试使用Mocha进行单元测试。我正在使用打字稿,它可以通过tsc编译成普通的javascript。我总是遇到错误:
src\index.ts:22
[new FrontendEndpoint(), ...],
^
TypeError: v1_1.default is not a constructor
我采用了两种方法(两次遇到相同的问题):
首先,我创建了一个虚拟测试test.test.ts
,并导入了一些模块进行测试:
import { APIServer } from './../api/index';
import { describe } from 'mocha';
import FrontendEndpoint from '../api/endpoints/frontend/v1';
import { SocketConnector } from '../api/sockets/socketio';
describe('TestTest', () => {
it('should run', (done) => {
const server = new APIServer(4000, [new FrontendEndpoint()], new SocketConnector([]));
done();
});
});
使用ts-mocha
ts-mocha src/test/test.test.ts
使用Mocha和已编译的ts文件
mocha build/test/test.test.js
两种方法都会产生上述错误。
index.ts
看起来像这样:
import FrontendEndpoint from './api/endpoints/frontend/v1';
[...]
new FrontendEndpoint()
已编译(index.js):
[...]
const v1_1 = require("./api/endpoints/frontend/v1");
[...]
new v1_1.default()
还有frontend/v1.ts
:
export default class FrontendEndpoint {
[...]
}
已编译(v1.js):
class FrontendEndpoint {
[...]
}
exports.default = FrontendEndpoint;
我的tsconfig看起来像这样:
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"noImplicitReturns": true,
"noImplicitAny": true,
"preserveConstEnums": true,
"strictPropertyInitialization": false,
"experimentalDecorators": true,
"typeRoots": [
"src/types"
],
"emitDecoratorMetadata": true,
"sourceRoot": "src",
"outDir": "build"
},
"compileOnSave": true,
"exclude": [
"node_modules",
"coverage",
"build",
"logs"
],
}
似乎只有默认导出问题。 为什么它们不能按预期运行?使用node build/index.js
运行应用程序时,一切运行正常,默认的导出/导入按预期运行。
当尝试通过Webpack,Mocha和Jest向前端React应用程序添加单元测试时,我遇到了相同的问题。我会完全想念什么吗?
答案 0 :(得分:2)
我自己找到了解决方法。
在调试测试时,我发现某些出口没有被调用。这是由于文件的周期性依赖关系导致无法正确导出文件。
使用https://github.com/pahen/madge找到这些周期并解决它们之后,运行测试就可以了。