我正在使用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()中挂钩,但没有成功。
答案 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");
});
});
});