4

これは一種の聖杯探しのようですが、JavaScriptの単体テスト環境のセットアップを探しています。要件は次のとおりです。

  • Requirejs AMD モジュールのテスト
  • 依存関係をモックアウトして各モジュールを分離する
  • 開発中にブラウザでテスト可能
  • 継続的インテグレーションのためのヘッドレス環境でテスト可能

ヘッドレス モッキングを除くすべてが単純なようです。

これまでのところ、私はJS-Test-DriverKarma、およびPhantomjsをテストしました。モックには、 SquireIsolateを使用しました。また、ここでの回答のコードの実装も、まったく正しく機能していないようです。 . 私が何度も何度も遭遇する主な問題は、すべてのテストが実行される前にテスト フレームワークが返されることです。これは主に、モックが独自のrequire()依存関係を必要とするためです。

どんな助け(または足場)も本当に役に立ちます!

[編集]

一致するライブラリとして chai-expect を使用して、いくつかの模擬テストのサンプルとともに、Github で基本的な動作するKarma プロジェクトを作成しました。もっと役立つドキュメントを追加しようと思いますが、Karma に精通している場合は、非常に簡単に拡張できるはずです。ちょうどgit cloneそれnpm installを実行するために。

4

1 に答える 1

5

通常、すべてのテスト フレームワークでは、非同期テストを実行し、手動でテストを開始することができます。これは必要なことです。

Qユニット

QUnit の場合、手動でテストを開始できるようにautostart設定する必要があります。false

QUnit.config.autostart = false;

require(['test/qunit/test.js'], function() {
    QUnit.start();
});

テスト中に非同期でロードする場合は、QUnitsstop()start()メソッドを使用してください。

test('something that loads asynchronously', function() {
    stop();
    define(['something'], function(sth) {
        ok(sth, 'Something loaded');
        start();
    });
});

モカ

モカは非常によく似た働きをします:

/*globals mocha */
mocha.setup('bdd');

require([ 'test/mocha/test.js' ], function() {
    mocha.run();
});

また、非同期テストは、仕様のコールバックとなるパラメーターを宣言することでさらに優れています。

describe('an async something', function() {
    it('loads the dependency', function(done) {
        define(['something'], function(sth) {
            ok(sth, 'Something loaded');
            done();
        });
    });
});

これは通常うまくいくはずです。RequireJS を使用してテスト ファイルをロードする場合、テストが常に同じ順序で実行されるとは限らないことに注意してください。

于 2013-05-24T04:49:15.553 に答える