我试图在我的测试文件中需要一个模块,但是当我将其导出为默认模块时却不知道该怎么做。我有以下代码:
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 {
我如何需要我的服务器模块?我需要能够在每次测试之前重置需求。
答案 0 :(得分:1)
您的测试环境似乎不支持TypeScript文件。
尝试使用ts-node
mocha -r ts-node/register src/**/test.ts
答案 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感谢您提到测试环境可能无法正确读取打字稿。