gpt4 book ai didi

javascript - QUnit:有没有在网站 DOM 树中不输出结果的官方解决方案?

转载 作者:行者123 更新时间:2023-11-30 12:34:28 25 4
gpt4 key购买 nike

我快速浏览了一下 QUnit ,一个用于单元测试 JavaScript 的框架。我的目的是使用 QUnit 调试复杂的网站行为。

然而,默认情况下,QUnit 的所有输出似乎都在 DOM 树中生成。因此,在运行单元测试时,任何在 DOM 树上运行的测试中的 JavaScript 都可能表现不同。我的意思是,真正的网站不会有 QUnit 的输出部分。

我找到了一些方法将结果输出到浏览器的控制台:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>QUnit Example</title>
<!-- not needed <link rel="stylesheet" href="qunit-1.15.0.css"> -->
<style>
#test {
background-color: #ff9900;
}
</style>
</head>
<body>

<!-- not needed...

<div id="qunit"></div>
<div id="qunit-fixture"></div>
-->

<script src="qunit-1.15.0.js"></script>
<script src="tests.js"></script>

<div id="testdiv">My normal DOM DATA</div>
</body>
</html>

在我的 tests.js 中,我有以下代码片段:

QUnit.log(function( details ) {
console.log( "QUnit: '" + details.name + "' = "
+ (details.result ? "PASS" : "FAIL, " + "'"+details.message+"'"));
});

这行得通。然而,我目前对这个快速而肮脏的解决方案的开放问题是:

  1. 我需要打开浏览器的控制台。当所有测试完成(汇总所有结果)时,现有解决方案可能会生成 alert()。调整上述代码以针对单个失败/通过的测试发送 alert() 是微不足道的(但请参阅问题 3)。

  2. 我无法启用“noglobals”检查功能,我发现它非常方便。/意思是,我找不到如何通过 JavaScript API 设置它。

  3. 我想知道是否有任何现有/官方解决方案(所以我不必重新发明轮子)。

最佳答案

所以,首先,对 JavaScript 进行单元测试吧!由于您强调的​​许多原因,这是经常避免的事情,所以很高兴看到您正在努力。

QUnit 必须在浏览器中运行。还有其他 JS 测试库不是绝对必须(例如 Mocha),但在测试网站代码时并非如此(主要用于测试 Node)。如果你想测试你的网站 JS 代码,你需要在浏览器上下文中。但更重要的是,不,您不需要在浏览器中查看 QUnit 结果。

查看输出的最简单方法很可能是使用自动化工具,尽管这不是设置起来最快的方法。例如,您可以使用 GruntQUnit plugin for Grunt ,它使用 PhantomJS 作为浏览器,自动运行测试并在终端(不是浏览器 JS 控制台,而是 Linux/Mac/Windows 终端)中查看输出。 Grunt 还可以用于 Jenkins、Travis 或 TeamCity 等持续集成工具。

事实上,QUnit 使您能够在测试运行后获得所有结果,并根据需要对它们进行任何操作。因此,您可以编写自己的代码来处理结果并对其进行处理(例如发送到 ajax 端点以进行报告):

var log = [];
// set up a handler to capture the output from QUnit.log()
// then put that output into the array above for reporting later
QUnit.testStart(function(testDetails){
QUnit.log(function(details){
if (!details.result) {
details.name = testDetails.name;
log.push(details);
}
});
});

// set up a callback for when the entire test suite is complete
QUnit.done(function (totals) {
// do whatever you need to in here with the totals (http://api.qunitjs.com/QUnit.done/)
// and with the individual test `log` array
});

因此,具体回答您的问题:

  1. 您可以将 window.alert(...) 挂接到 QUnit.done() 回调...但我认为您会更好使用自动化解决方案。
  2. 虽然您不能通过 API 以编程方式设置 noglobals 开关,但您可以简单地将其附加到测试文件的 URL 上:http://localhost:1234/tests/index.html?noglobals=true
  3. 参见我上面的示例,我们在所有项目中都使用 Grunt,但对于跨浏览器测试,我会查看 Sauce Labs及其 VM API。

祝你好运!

关于javascript - QUnit:有没有在网站 DOM 树中不输出结果的官方解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com