需要在测试文件中导出默认模块

时间:2019-11-20 17:04:43

标签: javascript node.js typescript ecmascript-6 mocha

我试图在我的测试文件中需要一个模块,但是当我将其导出为默认模块时却不知道该怎么做。我有以下代码:

server.ts

import { MyClass } from './myClass';

/* Other code here */

const server = app.listen(port, () => {
    console.log('Started');
});

export default server;

使用webpack可以完美构建。我导出服务器是因为我希望能够在我的规格文件中对其进行测试。我尝试在测试文件中执行此操作(使用Mocha):

testFile.ts

describe('Express Server', () => {
    let server: any;

    beforeEach(() => {
        delete require.cache[require.resolve('./server.ts')];
        server = require('./server.ts');
    });

    afterEach((done: any) => {
        server.close(done);
    });

    it('sample test', (done: any) => {
        done();
    });
});

当然,以上内容并未测试任何内容。但这没关系,因为它会在每个{之前插入一个错误:SyntaxError: Unexpected token {

我如何需要我的服务器模块?我需要能够在每次测试之前重置需求。

2 个答案:

答案 0 :(得分:1)

您的测试环境似乎不支持TypeScript文件。

尝试使用ts-node

运行mocha命令
mocha -r ts-node/register src/**/test.ts

来源:https://journal.artfuldev.com/write-tests-for-typescript-projects-with-mocha-and-chai-in-typescript-86e053bdb2b6

答案 1 :(得分:0)

因此,事实证明我不得不更改tsconfig.json中定义的模块。我将其从“ es2015”更改为“ commonjs”,问题中张贴的错误消失了。此外,我还必须按以下说明更改检索服务器的方式(在要求之后添加.default)。

tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist",
        "target": "es5",
        "module": "commonjs", // Had to change the value for this
        "sourceMap": true
    },
    "include": [
        "./src/**/*"
    ],
    "exclude": [
        "./dist",
        "./node_modules"
    ]
}

testFile.ts

describe('Express Server', () => {
    let server: any;

    beforeEach(() => {
        delete require.cache[require.resolve('./server.ts')];

        // Had to change this line to have ".default" at the end
        server = require('./server.ts').default;
    });

    afterEach((done: any) => {
        server.close(done);
    });

    it('sample test', (done: any) => {
        done();
    });
});

我没有完全了解“ es2015”和“ commonjs”之间的区别,因此,如果有人知道,请分享。使用以上更改,我能够运行以下命令:

nyc ts-mocha -p tsconfig.json --reporter mocha-multi-reporters --reporter-options configFile=test/config/mocha-config.json test/**/*.test.ts --exit

并将其插入服务器,我的所有测试均通过,没有任何错误。 Freez感谢您提到测试环境可能无法正确读取打字稿。