1

モジュールにいくつかの qunit テスト ケースを追加しています。テストケースのいくつかには、標準stop()およびstart()ドキュメントに従って使用している同期プロセスがあります。

私の質問は、余分な 1 秒setTimeout(function () { start();}, 1000);がテスト実行の実行時間に追加され、結果が正確になるという事実ではありませんか?

+1000ms がテストスイートの外部としてランタイムに追加されることに少し満足していません。テストを実行するためにここに追加された 1000ms なしでプロセスが完了するモジュールを使用する実際のアプリ内です。

したがって、このインターフェイスをあまり技術的でないテスターに​​渡すときは、テストのタイトルで、そのテストから 1000 を差し引いてから合計するか、全体の速度などを計算するように説明する必要があります [基本的には、余分なタイムアウトを設定する方法が必要です結果から自動的に削除されます]

ここに画像の説明を入力

以下のモジュールコード:

    define("tests/admin.connections.tests", ["mods/admin.connections", "datacontext"], function (connections, datacontext) {

    module("ADMIN PAGE CONNECTION LIST MODULE", {
        setup: function () {
            //ok(true, "once extra assert per test for Search Modules");
        }
    });

    test('Module is available?', function () {
        equal(_.isUndefined(connections), false, "connections js module exists");
        equal(_.isObject(connections), true, "connections js module is valid object");
    });

    test('HTML and CSS loading correctly? [Subtract 1 second from time to get the real time lapsed]', function () {
        function testHtml(html) {
            var d = document.createElement('htmlTestDiv');
            d.innerHTML = html;
            return d.innerHTML.replace(/\s+/g, ' ');;
        }
        stop();
        $.get('http://media.concepglobal.com/cbaddons/templates/connections.html', function (data) {
            equal(testHtml(connections.html), data.replace(/\s+/g, ' '), 'Html of the module was correctly loaded');
        });
        $.get('http://media.concepglobal.com/cbaddons/styles/connections.css', function (data) {
            equal(testHtml(connections.css), data.replace(/\s+/g, ' '), 'CSS of the module was correctly loaded');
        });
        setTimeout(function () { start();}, 1000);        
    });

    test('getConnectionsByUserId Async Method [Subtract 1 second from time to get the real time lapsed]', function () {
        function getConnectionsByUserId(successCallback) {
            amplify.request("getConnectionsByUserId", { uid: '0' }, function (data) {
                connections.userConnectionsCallback(data);
                successCallback();
            });
        }
        stop();
        getConnectionsByUserId(function () {
            var connectionsReturnedData = connections.connectionListViewModel.connections();
            expect(2);
            ok(_.isArray(connectionsReturnedData), 'Valid array has been returned for connections: ' + connectionsReturnedData);
            equal(connectionsReturnedData[0].type(), "sitecore", 'First returned object has a type property of "' + connectionsReturnedData[0].type() + '" and we expected it to be "sitecore"');
        });
        setTimeout(function () { start(); }, 1000);
    });

});
4

1 に答える 1

3

QUnit は現在実行中のテストを に保存しQUnit.config.currentます。これにより、実行中にテストを変更できます。

おそらく必要なのは、タイムアウト後にテストのタイマーをリセットすることです。

私が何を意味するかを示すために、小さな例を作成しました ( jsFiddle を参照)。

asyncTest("Long running test with 2s timeout", function () {
    expect(1);
    ok(true);
    setTimeout(function () { 
        QUnit.config.current.started = +new Date();
        start();
    }, 2000);
});

そのように、タイムアウトが終了するとタイマーがリセットされます。これにより、実行される内容に関してより正確なランタイムが得られます。これで、すべてのテストを実行するために実際に使用された時間が合計時間だけに表示されます。

タイマーリセットによる長時間テスト

于 2013-02-18T23:46:03.650 に答える