gpt4 book ai didi

javascript - 事件回调的代码覆盖率

转载 作者:数据小太阳 更新时间:2023-10-29 03:57:52 26 4
gpt4 key购买 nike

我使用 Karma(当前为 v0.10.10)和 Jasmine 进行单元测试,并使用 Istanbul(通过 karma-coverage)进行代码覆盖率报告。我注意到代码覆盖率报告器在特定情况下的奇怪行为。

我要测试的代码大致是这样的:

/**
* @param {HTMLInputElement} element
*/
var foo = function(element) {
var callback = function() {
// some code
};

element.addEventListener("input", callback);
};

在我的测试中,我在被测元素上发送自定义输入事件,然后执行回调函数。测试检查回调的效果,测试通过。事实上,即使我在回调中放了一个毛茸茸的 console.log("foo") ,我也能清楚地看到它被打印出来了。然而,Istanbul 的报告错误地指出回调根本没有执行

修改测试代码以在事件监听器的回调中使用匿名函数修复错误行为:

element.addEventListener("input", function() {
callback();
});

但是,我非常鄙视修改应用程序代码以弥补代码质量控制工具缺陷的“解决方案”。

有没有一种方法可以在不将回调包装在匿名函数中的情况下正确获取代码覆盖率?

最佳答案

正在将回调传递到您的方法中。除了您的函数定义之外, Istanbul 尔完全不知道该回调来自何处。 Istanbul 知道 callback() 来自参数 callback,但不知道该回调的内部(例如,它作为回调传入之前的函数)。

//编辑示例

var callback = function(args) {
//do stuff
}

var foo = function (callback) {
// do stuff
callback(arguments);
}

现在为 foo 的功能创建一个测试,并为 callback 的功能创建一个单独的单元测试。单元测试应该只测试一件事。每个功能都应该有自己的单元测试。测试 foo 执行它应该做的事情(不管回调如何)并且该回调执行它应该做的事情(为测试传递您自己的模拟数据)。通常,命名函数总是可行的方法。

关于javascript - 事件回调的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417531/

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