使用全局变量的 mocha 测试(和 babel)

mocha test (and babel) using global variables

我正在使用 es6 编写库,通过 webpack 和 npm 用 babel 转译它。 问题是,我的库依赖于一些代码,我无法更改但需要使用。我不知道如何在我的测试中加载 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 is not defined"

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

最后我找到了 'good enough' 的解决方案。不过,我不确定这对于某些高级库是否足够。

我创建了名为 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;
});

这非常适合单元测试,因为我还可以模拟东西。它甚至更棒,因为这样我就有了一个 'define' 全局依赖项的地方。改进它并根据 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");
        });
    });
});