Javascript 在使用Mocha测试TypeScript时,默认值不是构造函数
我正在尝试使用mocha进行单元测试。我使用的是typescript,它可以通过tsc编译成纯javascript。我总是会遇到这样的错误:Javascript 在使用Mocha测试TypeScript时,默认值不是构造函数,javascript,typescript,testing,mocha.js,Javascript,Typescript,Testing,Mocha.js,我正在尝试使用mocha进行单元测试。我使用的是typescript,它可以通过tsc编译成纯javascript。我总是会遇到这样的错误: src\index.ts:22 [new FrontendEndpoint(), ...], ^ TypeError: v1_1.default is not a constructor 我采用了两种方法(并两次遇到相同的问题): 首先,我创建了一个虚拟测试test.test.ts,为测试目的导入了一些模
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摩卡、摩卡、@types/mocha
- 运行
ts摩卡src/test/test.test.ts
- 已安装摩卡咖啡,@types/mocha
- Ran
mocha build/test/test.test.js
index.ts
如下所示:
import FrontendEndpoint from './api/endpoints/frontend/v1';
[...]
new FrontendEndpoint()
{
"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"
],
}
已编译(index.js):
和前端/v1.ts
:
export default class FrontendEndpoint {
[...]
}
已编译(v1.js):
我的tsconfig如下所示:
import FrontendEndpoint from './api/endpoints/frontend/v1';
[...]
new FrontendEndpoint()
{
"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应用程序时,我遇到了同样的问题。我完全错过了什么吗?我自己找到了解决办法
在调试测试时,我发现一些导出没有被调用。这是由于文件的循环依赖关系导致无法正确导出文件
在使用并解决这些循环后,运行测试工作正常。我自己找到了解决方案
在调试测试时,我发现一些导出没有被调用。这是由于文件的循环依赖关系导致无法正确导出文件
在找到使用并解决这些循环后,运行测试工作正常。其他人提到了默认导入的问题,并在前几天开玩笑。。。嗯。frontend/v1.ts
:…exports.default=frontendpoint;
“如果答案显而易见,我不是一个打字高手,但为什么不导出默认frontendpoint呢?”代码>?导入时使用ESM语法,导出时使用CommonJS语法…?我可能有点不清楚。这是从typescript编译的javascript。这是typescript编译器处理默认导出的方式。您说*”,然后是frontend/v1.ts:
,后面是代码。所以我自然地认为这是frontend/v1.ts
中的代码。在编辑时,我不知道该代码是什么。请您同时显示导出的typescript和带有清晰标签的JavaScript,好吗(就像你对index.ts
所做的那样)。当然,对不起。我添加了源代码。其他人提到了默认导入的问题,并在前几天开玩笑……嗯。”还有frontend/v1.ts
:…exports.default=frontendpoint;
"抱歉,如果答案很明显,我不是一个大的TypeScript人,但是为什么不导出默认FrontEndpoint;
?导入时使用ESM语法,导出时使用CommonJS语法…?我可能有点不清楚。这是从TypeScript编译的javascript。这是TypeScript编译器处理默认导出的方式。你说:d*“和frontend/v1.ts:
后面跟着代码。所以我自然地认为那是frontend/v1.ts
中的代码。编辑后,我不知道那是什么代码。请您显示导出的类型脚本和JavaScript,清楚地标记(就像您使用index.ts
时那样)。当然,对不起。我添加了源代码。