javascript - ..._1.default 在使用 Mocha 测试 TypeScript 时不是构造函数
问题描述
我正在尝试使用 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、mocha、@types/mocha
- 冉
ts-mocha src/test/test.test.ts
使用 mocha 和编译的 ts 文件
- 已安装 mocha,@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 应用程序时,我遇到了同样的问题。我完全错过了什么吗?
解决方案
我自己找到了解决方案。
在调试我的测试时,我发现一些导出没有被调用。这是由于文件的循环依赖性导致它们无法正确导出。
在使用https://github.com/pahen/madge找到这些循环并解决它们之后,运行测试就可以正常工作了。
推荐阅读
- sql - PLSQL 错误 PLS-00103:在预期以下情况之一时遇到符号“CREATE”
- generics - 获取要创建的改造接口类的函数导致错误的返回类型
- azure - 自动刷新令牌并添加新的用户安全组 Azure AD
- python - 将 Keras 自定义损失函数中的张量拟合到另一个网络
- css - 我如何在其他 flex 中对齐内容
- c# - 将多个列表合并为一个 json 字符串
- python - 我正在尝试运行 skbio 并不断收到“ModuleNotFoundError:没有名为“skbio.core”的模块
- asp.net-core - 运行 Azure DevOps 测试任务时出现无效的结果文件警告
- vue.js - 如何使用 VeeValidate 测试超过 2 个组件?
- python - 查找给定数字在分区中的位置