显示Jasmine运行的测试/期望的总数

Display total number of tests/expectations run by Jasmine

本文关键字:期望 测试 Jasmine 运行 显示      更新时间:2023-11-19

我正在将一大组QUnit测试转换为Jasmine。在QUnit中,我习惯于看到所有测试模块的测试总数,显示在顶部。例如:

测试在157毫秒内完成。

528项测试中有528项通过,0项未通过。

我认为测试的数量是重要的信息。然而,Jasmine的示例测试运行程序并没有显示测试的总数。相反,你会得到这样的东西:

通过106规格

这些规格中的每一个都可能包含任何数量的单独测试。是否可以确定已运行的测试总数,以便在测试运行程序中显示它?我在网上和Jasmine文档中寻找信息,但到目前为止还没有找到任何信息。


解决方案

根据@ggozad的回复,我提出了以下解决方案,并将其打印到控制台。关于如何改进它或如何将结果干净地添加到Jasmine的HTML输出的建议是受欢迎的。

var jasmineEnv = jasmine.getEnv();
var htmlReporter = new jasmine.HtmlReporter();
var reportRunnerResults = htmlReporter.reportRunnerResults;
htmlReporter.reportRunnerResults = function(runner) {
    reportRunnerResults(runner);
    var specs = runner.specs();
    var specResults;
    var assertionCount = {total: 0, passed: 0, failed: 0};
    for (var i = 0; i < specs.length; ++i) {
        if (this.specFilter(specs[i])) {
            specResults = specs[i].results();
            assertionCount.total += specResults.totalCount;
            assertionCount.passed += specResults.passedCount;
            assertionCount.failed += specResults.failedCount;
        }
    }
    if (console && console.log) {
        console.log('Total: ' + assertionCount.total);
        console.log('Passed: ' + assertionCount.passed);
        console.log('Failed: ' + assertionCount.failed);
    }
};
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function(spec) {
    return htmlReporter.specFilter(spec);
};
window.onload = function() {
    jasmineEnv.execute();
};

控制台输出示例:

Total: 67
Passed: 67
Failed: 0 

规范是Jasmine中的测试。在它内部,您可以有类似于其他测试框架中的断言expects。因此,您看到报告的规格数量是每次it调用的总数:

it('passes some expectations', function () {
  ...
});

通常,您会在it中将几个类似单元的测试组合在一起,这将有助于将功能组合在一起并对应用程序的开发方式提供更一致的视图。

现在,如果你坚持想知道在你的规范中失败/成功的期望,你总是可以从你的记者那里得到这些信息。例如,如果你设置了一个htmlReporter的实例,你可以这样做:

htmlReporter.reportRunnerResults = function (runner) {
...
};

在你的功能中,你可以检查各种各样的东西,这里有一些提示:

  • runner.specs()为您提供所有规格
  • 对于其中的每一个,比如specresults = spec.results()都会给你关于期望的信息
  • results.totalCountresults.failedCountresults.passedCount是您想要的;)

非常有用的信息。您可能希望将其附加到页面,而不是将其写入控制台。您可以将控制台脚本替换为。。。

var d1 = document.createElement("span");
$(d1).css('font-size', '10pt');
$(d1).html(' (Total Expectations: ' + assertionCount.total);
$(d1).append(', Total Expectations Passed: ' + assertionCount.passed);
$(d1).append(', Total Expectations Failed: ' + assertionCount.failed);
$(d1).append(')');
$(".passingAlert").append(d1);
$(".resultsMenu").append(d1);