Javascript 使用全局变量的摩卡测试(和巴别塔)
我正在使用es6编写库,通过webpack和npm与babel进行传输。 问题是,我的库依赖于一些代码,我不能更改它们,但需要使用它们。我不知道如何在我的测试中加载var stuff(来自下面的示例),以便它对模块可见 请参见示例: external stuff.js-此文件无法更改,并在将我的库加载到prod env之前加载Javascript 使用全局变量的摩卡测试(和巴别塔),javascript,node.js,npm,mocha.js,babeljs,Javascript,Node.js,Npm,Mocha.js,Babeljs,我正在使用es6编写库,通过webpack和npm与babel进行传输。 问题是,我的库依赖于一些代码,我不能更改它们,但需要使用它们。我不知道如何在我的测试中加载var stuff(来自下面的示例),以便它对模块可见 请参见示例: external stuff.js-此文件无法更改,并在将我的库加载到prod env之前加载 var stuff = { get some() { return "some"; } get stuff() { return "stuff"; }
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()hook中定义“stuff”,但没有成功。最后我找到了一个“足够好”的解决方案。不过,我不确定这对一些高级图书馆来说是否足够 我已经创建了名为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";
然后我使用npm模块,在每个钩子之前,我将全局加载到测试中
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");
});
});
});
您是否将
stuff
从external-stuff.js导入some-module.js?我没有看到任何进口商品,所以我是asking@ArpitSolanki不,我没有,因为正如您所注意到的,stuff.js不是es6模块,它只是一个全局变量。这个全局模块是如何加载的?你能告诉我吗?@arpitolanki事实上,它很难包含在使用rhino进行js解析的java模块中,我们只是将生成的Transpile库加载到其中。