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 回答