2013-11-27 46 views
1

五指交叉,这是我已经错过了配置选项,但我已经检查文档,找不到它的任何信息...QUnit的JavaScript单元测试显示断言数量不考数

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

目前,它显示:38传递

13断言,25失败。

正如在这里看到: Qunit

这很烦人,因为我想跟踪有多少测试,我已经写了,和QUnit网站上,它实际上显示了我想要的: enter image description here

从更改日志看来,它在1.11.0中更改。有没有人有任何建议,如何改变它而无需黑客的源代码(或黑客的源代码 - 虽然这可能会提出并通过github添加...)?

回答

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对象。不幸的是,根据我在源代码中读到的内容,它只存储与断言相关的统计信息,而不是测试。推测可能会添加一些可以存储失败测试的破解代码,但是它需要对现有源代码有很好的了解,所以我不会推荐这样做。

正如你所说,你最好的选择是在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源代码! :)

+0

非常感谢您的回答和代码。我添加了一个类似的东西到我正在使用的定制QUnit。除了你想评估你的代码如何满足需求的情况外,我认为断言比测试更重要。如果每个测试都涵盖了一项功能,那么最好是对这些功能进行计数,而不是对每一项测试进行计数,其中许多测试可能与每次测试之前的设置有关,而不是功能本身。再次感谢。 – WheretheresaWill