Mocha 测试中轻松包装 `describe`、`context` 和 `it` 块的流畅可插拔接口。
var wrap = require('mocha-wrap');
var expect = require('chai').expect;
var mockWindow = {
location: {
href: 'test/url'
}
};
wrap().withGlobal('window', () => mockWindow).describe('mocked window', function () {
it('is mocked', function () {
expect(window).to.equal(mockWindow);
});
it('has the right URL', function () {
expect(window.location.href).to.equal('test/url');
});
});
var obj = { a: 1 };
wrap().withOverrides(() => obj, () => ({ a: 2, b: 3 })).describe('overridden object keys', function () {
it('has "b"', function () {
expect(obj.b).to.equal(3);
});
it('has overridden "a"', function () {
expect(obj.a).to.equal(2);
});
});
wrap().withOverride(() => obj, 'a', () => 4).skip().describe('this test is skipped', function () {
it('also supports .only()!', function () {
expect(true).to.equal(false); // skipped
});
});
一个 `mocha-wrap` **插件** 是一个命名函数,它返回一个 MochaWrapper 实例或一个描述符对象。
插件函数的 `name` 必须以字符串“with”开头。
插件可以全局注册,也可以使用 `.use` 进行临时使用。
`.use` 需要一个插件函数作为其第一个参数;后续参数将传递给插件。
`.extend` 需要一个非空的描述字符串和一个描述符对象,该对象可能包含一个函数值或函数数组,其键对应于所有或任何支持的 mocha 方法。
全局注册的插件、`.use` 调用和 `.extend` 调用可以链接、存储和重用 - 链中的每个链接都会创建一个新的 MochaWrapper 实例。
一个描述符对象可以包含以下 5 个键中的任何一个或所有
一个 `description` 字符串,用于“describe”和/或“it”(在返回对象时需要此字符串)
beforeEach
:一个函数或函数数组,用于 `mocha` 的 `beforeEach` 函数
afterEach
:一个函数或函数数组,用于 `mocha` 的 `afterEach` 函数
before
:一个函数或函数数组,用于 `mocha` 的 `before` 函数
after
:一个函数或函数数组,用于 `mocha` 的 `after` 函数
最常见的方法是插件函数返回 `this.extend(description, descriptor)`。
插件函数必须具有以“with”开头的 `name`,并且将使用 MochaWrapper 实例的接收器(“this”值)调用。
要注册插件,请使用插件函数在 `mocha-wrap` 上调用 `register` 函数。这不应该在可重用的模块中完成。
module.exports = function withFoo(any, args, you, want) {
return this.extend('with some foo stuff', {
beforeEach: function () {
// setup ran before each test
},
afterEach: [
function () {
// teardown ran after each test
},
function () {
// more teardown
}
],
before: function () {
// setup ran once before all tests
},
after: function () {
// teardown ran once after all tests
}
});
};
var wrap = require('mocha-wrap');
wrap.register(require('mocha-wrap-with-foo'));
wrap().withFoo().describe…
虽然 mocha 有 `describe.skip`、`describe.only`、`context.skip`、`context.only`、`it.skip` 和 `it.only`,但在不使用 ES5 属性访问器的情况下,无法在 mocha-wrap 中实现这些功能。由于此项目支持 ES3,因此我们决定使用 `.skip().describe` 等,而不是放弃拥有 skip/only 的能力。
只需克隆仓库,运行 `npm install`,然后运行 `npm test`