【问题标题】:How to write unit test for a RequireJS project如何为 RequireJS 项目编写单元测试
【发布时间】: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


【解决方案1】:

进入项目根目录,然后 安装 amd-loader 模块并尝试运行以下命令,此问题将得到解决。

node node_modules/mocha/bin/mocha --require ts-node/register -r amd-loader --timeout=0 tests/**/*.ts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2019-03-23
    • 2018-01-17
    • 2012-01-06
    • 2019-03-17
    • 2016-04-02
    相关资源
    最近更新 更多