使用全局变量的 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");
});
});
});
我正在使用 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");
});
});
});