【发布时间】:2018-03-08 07:08:35
【问题描述】:
我正在尝试使用 chai mocha 编写单元测试,但出现以下错误。
ReferenceError: 定义未定义
这个应用程序是用 TypeScript 编写的,如果我尝试创建一些虚拟文件来创建单元测试,它可以在没有任何导入的情况下正常工作。
单元测试代码如下
import { expect } from 'chai';
import { MarionetteApp } from '../app/app';
describe("MarionetteApp", () => {
describe("Add", () => {
it("Should return 3 when a = 1 and b = 2", () => {
let calc = new MarionetteApp();
var result = calc.test();
expect(result).to.equal("hello");
});
});
});
我要编写单元测试的文件是
import { RootView } from './views/RootView';
import { AdvancedCustomController } from './controllers/AdvancedCustomController';
import * as DB from './db/DB';
export class MarionetteApp extends Marionette.Application {
constructor() {
super();
}
test(){
return "hello";
}
initialize() {
(<any>window).UXToolApp = this;
}
onBeforeStart() {
//Init controllers
var advancedCustomizationController = new AdvancedCustomController();
//Init views
var rootView = new RootView();
rootView.render();
}
}
在运行单元测试时,我收到以下错误
tsconfig 文件如下
"version": "1.5.0-beta",
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true,
// "module": "commonjs",
"isolatedModules": true,
"jsx": "react",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declaration": true,
"noImplicitAny": false,
"removeComments": false,
"noLib": false,
"preserveConstEnums": true,
"suppressImplicitAnyIndexErrors": true,
"rootDir": "./app",
"moduleResolution" : "node"
},
package.json 如下
{
"name": "design_mode",
"version": "1.0.0",
"description": "",
"main": "scripts/designMode.ts",
"directories": {
"test": "test"
},
"dependencies": {
"amd-loader": "^0.0.8",
"amdefine": "^1.0.1",
"chai": "^4.1.2",
"mocha": "^5.0.3",
"requirejs": "^2.3.5",
"ts-node": "^5.0.1",
"ws": "^0.4.32"
},
"devDependencies": {
"del": "^2.0.0",
"gulp": "^3.9.0",
"gulp-less": "^3.0.3",
"gulp-rename": "^1.2.2",
"gulp-sourcemaps": "^1.6.0",
"gulp-tslint": "^3.2.0",
"gulp-typescript": "^2.8.1",
"gulp-util": "^3.0.6",
"less": "^2.5.1",
"tsd": "^0.6.4",
"typescript": "^2.7.2"
},
"scripts": {
"test": "./node_modules/.bin/mocha --compilers ts:ts-node/register ./test/*.spec.ts",
"server": "cd server && node server.js",
"build": "gulp"
},
"author": "",
"license": "ISC"
}
【问题讨论】:
-
看起来您正在使用 RequireJS,并且您不能使用在 ES6 中使用 require 的
define创建的模块或开箱即用的 TS 模块导入。 -
这个错误来自 loadpouchdb.js 文件,如图所示 define([ '../assets/lib/pouchdb.min', '../assets/lib/pouchdb.upsert.min', './utils/util' ], function (PouchDB, PouchDBUpsert, util) { 'use strict'; PouchDB.plugin(PouchDBUpsert); window.PouchDB = PouchDB; var dbConn; var versionId;
-
是的,它也在使用 require js
-
define来自 requirejs,它不是默认定义的全局。
标签: javascript unit-testing typescript requirejs mocha.js