mocha-wrap

`describe` および `it` ブロックを Mocha テストに簡単にラップするための、明確でプラグイン可能なインターフェイス
51
作成者Jordan Harband

describe、`context`、it ブロックを Mocha テストにラップするための、明確でプラグイン可能なインターフェイスです。

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 つすべてまたはその一部が含まれる場合があります。

  • 「describe」および/または「it」で使用する `description` 文字列(オブジェクトを返還する場合に必要です)

  • beforeEach: `mocha` `beforeEach` 関数で使用する関数または関数配列

  • afterEach: `mocha` `afterEach` 関数で使用する関数または関数配列

  • before: `mocha` `before` 関数で使用する関数または関数配列

  • after: `mocha` `after` 関数で使用する関数または関数配列

通常は、プラグイン関数が `this.extend(description, descriptor)` を返還します。

プラグイン関数の `name` は「with」から始まり、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` がありますが、mocha-wrap には ES5 プロパティアクセッサを使用せずにこれらを実装することはできません。プロジェクトでは ES3 をサポートするため、スキップ/オンリー機能を放棄する代わりに `.skip().describe` などを使用することにしました。

テスト

リポジトリをクローンして `npm install` を行い、`npm test` を実行するだけです。

リンク