mocha test(和babel)使用全局变量

时间:2018-02-20 14:02:29

标签: javascript node.js npm mocha babeljs

我正在使用es6编写库,通过webpack和npm通过babel进行编译。 问题是,我的lib依赖于某些代码,我无法改变但需要使用。我不知道如何在我的测试中加载 var stuff (来自以下示例),以便模块可以看到它。

参见示例:

external-stuff.js - 在我的lib加载到prod env之前,无法更改此文件并加载。

var stuff = {
    get some()  { return "some"; }
    get stuff() { return "stuff"; }
}

some-module.js - 这是图书馆的其中一个模块

export class foo {
    static get whatever() { return stuff.some; }
    static get whichever() { return stuff.stuff; }
}

测试

import {foo} from "../src/foo.js";

let assert = require('assert');

describe('foo', function() {
    describe('#whatever()', function() {
        it("should do some", function () {
            assert.equals(foo.whatever(), "some");
        });
    });
});

如果我运行这个,我得到" ReferenceError:没有定义东西"

我已经尝试定义" stuff"在before()中挂钩,但没有成功。

1 个答案:

答案 0 :(得分:0)

最后我发现了一个“足够好”的解决方案。我不确定它是否适合某些高级库。

我创建了名为globals.js的文件

var g = typeof(window) === 'undefined' ? global : window;

// Dependencies - add as many global stuff as needed
g.stuff= typeof(stuff) === 'undefined' ? {} : stuff;

我在测试开始时导入了'es6module'

import * as globals from "../lib/global/globals"
import {foo} from "../src/foo.js";

然后我使用node-import npm模块,我将其加载到beforeEach钩子中的测试中。

beforeEach(function () {
    global.stuff = imports.module("lib/global/stuff.js").stuff;
});

这非常适合单元测试,因为我也可以模拟东西。它更加令人敬畏,因为这样我就有了一个“定义”全局依赖关系的地方。根据es6modul依赖关系进行改进并建立它会很好...并且在它上面构建一些奇特的...你知道...依赖注入。

完成测试

require('node-import'); // +

import * as globals from "../lib/global/globals";  // +
import {foo} from "../src/foo.js";

let assert = require('assert');

describe('foo', function() {
    beforeEach(function () {  // +
        global.stuff = imports.module("lib/global/stuff.js").stuff;  // +
    });  // +

    describe('#whatever()', function() {
        it("should do some", function () {
            assert.equals(foo.whatever(), "some");
        });
    });
});