QUnit Javascript单元测试显示断言号而不是测试号

时间:2013-11-27 10:35:07

标签: javascript unit-testing qunit

手指交叉这是我错过的配置选项,但我检查过文档但找不到任何信息......

我希望QUnit显示传递/失败的测试的数量,而不是传递/失败的断言的数量

目前显示:

  

13个断言,38个通过,25个失败。

如下所示: Qunit

这很烦人,因为我想跟踪我写过的测试数量,在QUnit网站上它实际显示了我想要的内容: enter image description here

从更改日志看,它在1.11.0中已更改。有没有人有任何关于如何在不破解源代码的情况下更改它的建议(或者黑客攻击源代码 - 虽然这可能会通过github提出并添加...)?

1 个答案:

答案 0 :(得分:2)

简短的回答:这是不可能的。事实上,似乎从未有过。

来自更改日志:

  

将测试重命名为摘要中的断言。修正#336 - 摘要计算断言,但提到“测试”。

QUnit始终计算并输出通过/失败的断言数。然而,在通过它说“测试”它应该说“断言”。如果您重新阅读更改日志,它会将其从“测试”更改为“断言”作为修复,因为这是它应该说的。

关于你的后续问题,是否有可能破解源代码?

查看代码,第1269到1279行似乎是生成输出的地方:

html = [
    "Tests completed in ",
    runtime,
    " milliseconds.<br/>",
    "<span class='passed'>",
    passed,
    "</span> assertions of <span class='total'>",
    config.stats.all,
    "</span> passed, <span class='failed'>",
    config.stats.bad,
    "</span> failed."

所以它存储了config.stats对象中的pass / failed次数。不幸的是,从我在源代码中读到的内容来看,它只存储与断言有关的统计信息,而不是测试。据推测,有可能添加一些可以存储失败测试的黑客代码,但是需要对现有源代码有很好的了解,所以我不建议这样做。

正如你所说,你最好的选择是在GitHub上建议它,但是我不知道你在不久的将来会加入什么机会(如果全部的话),看作断言的数量是多少失败(通常)比测试的数量更有价值。

更新:我有更多的搜索源代码,因为我很好奇它会有多难。虽然我无法找到将此功能添加到代码中的任何简单方法,但我确实想到了解决问题的替代方法。

QUnit有一个名为QUnit.testDone()的方法,如果你实现它,将在每个测试完成后自动调用。您可以使用它在每次测试后手动递增测试计数器,并输出到Chrome的开发人员控制台。以下是如何执行此操作的示例:

<!DOCTYPE html>
<html>
<head>
    <title>Track Number of Tests Manually</title>
    <link type="text/css" rel="stylesheet" href="qunit-1.12.0.css" />
    <script type="text/javascript" src="qunit-1.12.0.js"></script>
    <script type="text/javascript" src="jquery-1.10.2.min.js"></script>
</head>
<body>
    <div id="qunit"></div>
    <div id="qunit-fixture">
        <input type="text" name="aninput" id="aninput" />
    </div>
    <script>
        // Track number of tests run and failed.
        var numTests = 0;
        var failedTests = 0;

        // Outputs the number of failed tests so far. If the console is not cleared each time, then the last message will be the final count.
        QUnit.testDone(function( details ) {
            // If any previous messages in console, clear them
            console.clear();
            // Increment number of tests run
            numTests++;
            // If any assertions have failed, increment number of failed tests
            if (details.failed > 0)
                failedTests++;
            var passed = numTests - failedTests;
            // Output to console.
            console.log( 'Passed Tests: '+passed+'\nFailed Tests: '+failedTests+'\nTotal Tests: '+numTests);
        });

        test( "a test", function() {
            equal( $('#aninput').val(), '', 'Initially empty');
            $('#aninput').val('sometext');
            equal( $('#aninput').val(), 'sometext', 'Input text now "sometext"');
        });

        test( "another test", function() {
            equal( $('#aninput').val(), '', 'Initially empty');
            $('#aninput').val('sometext');
            equal( $('#aninput').val(), 'some text', 'Input text now "some text"'); // Expect to fail, as there is no space in the input
            $('#aninput').val(' ');
            equal( $('#aninput').val(), '', 'Input should now be empty'); // Expect to fail as was actually set to whitespace, not empty
        });
    </script>

</body>
</html>

我已经测试了这段代码,似乎可以解决这个问题。我知道这不是您所追求的解决方案,但它确实为您提供了所需的信息,而无需尝试破解QUnit源代码! :)