..._ 1。使用Mocha测试TypeScript时,default不是构造函数

时间:2019-01-11 13:03:05

标签: javascript typescript testing mocha

我正在尝试使用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();
        });
    });

  1. 使用ts-mocha

    • 已安装ts-mocha,mocha,@ types / mocha
    • ts-mocha src/test/test.test.ts
  2. 使用Mocha和已编译的ts文件

    • 已安装的摩卡,@ types / mocha
    • 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应用程序添加单元测试时,我遇到了相同的问题。我会完全想念什么吗?

1 个答案:

答案 0 :(得分:2)

我自己找到了解决方法。

在调试测试时,我发现某些出口没有被调用。这是由于文件的周期性依赖关系导致无法正确导出文件。

使用https://github.com/pahen/madge找到这些周期并解决它们之后,运行测试就可以了。