Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 要求导出测试文件中的默认模块_Javascript_Node.js_Typescript_Ecmascript 6_Mocha.js - Fatal编程技术网

Javascript 要求导出测试文件中的默认模块

Javascript 要求导出测试文件中的默认模块,javascript,node.js,typescript,ecmascript-6,mocha.js,Javascript,Node.js,Typescript,Ecmascript 6,Mocha.js,我试图在我的测试文件中需要一个模块,但当我将其导出为默认模块时,却不知道如何做到这一点。我有以下代码: server.ts import { MyClass } from './myClass'; /* Other code here */ const server = app.listen(port, () => { console.log('Started'); }); export default server; describe('Express Server',

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

server.ts

import { MyClass } from './myClass';

/* Other code here */

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

export default server;
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();
    });
});
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();
    });
});
使用webpack,这个构建非常好。我导出服务器是因为我希望能够在规范文件中测试它。我尝试在我的测试文件中这样做(使用mocha):

testFile.ts

import { MyClass } from './myClass';

/* Other code here */

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

export default server;
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();
    });
});
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();
    });
});
当然,上述内容并不是在测试任何东西。但这并不重要,因为它在beforeach:
SyntaxError:Unexpected token{


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

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

尝试使用
ts节点运行mocha命令

mocha -r ts-node/register src/**/test.ts

来源:

因此,我不得不更改
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

import { MyClass } from './myClass';

/* Other code here */

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

export default server;
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();
    });
});
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

它拉入了服务器,我的所有测试都顺利通过。感谢您提到测试环境可能没有正确读取typescript。

他们这样做了。我有其他用typescript编写的测试文件,它们工作正常。这是我运行的命令:
nyc ts mocha-p tsconfig.json--reporter mocha multi reporters--reporter options configFile=test/config/mocha-config.json test/***.test.ts--exit
我尝试添加
-r ts node/register
但我得到了相同的错误。如果不
删除require.cache[require.resolve('./server.ts')]
,会发生什么情况?是的,出现了相同的错误。感谢您的洞察力,我找到了解决方案(贴出答案)谢谢!