gpt4 book ai didi

javascript - 使javascript函数回调-ish

转载 作者:行者123 更新时间:2023-11-30 18:52:54 25 4
gpt4 key购买 nike

我有一个使用 jquery 的 javascript 函数:

my.namespace.loadSomeStuff = function() {

$.get('/Services/loadStuff', function(c){
$("#stuffDiv").html(c);
});
};

并且正在尝试为此编写单元测试。

现在,因为这个函数并没有真正返回任何东西和加载一些使用 jquery 的“get”异步的东西我很难测试这个。

基本上我想做的是调用这个函数,等到它返回一些东西然后访问加载的元素以验证......像这样的东西:

my.namespace.loadSomeStuff(function(){
alert('boo');
assertSame('Login', $("#stuffDiv").find(......);
});

现在,我在调用单元测试的模板中创建了一个,它将正确加载和显示,但永远不会执行警报或断言。

有没有一种方法可以做到这一点,而无需为我拥有的每个函数添加大量额外代码?

谢谢

最佳答案

您必须向 loadSomeStuff 方法添加一个参数以接收您在示例代码中调用的回调函数,然后特意调用它:

my.namespace.loadSomeStuff= function(callback) {
$.get('/Services/loadStuff', function(c){
$("#stuffDiv").html(c);
if (callback!==undefined)
callback();
});
};

我不确定仅仅为了支持单元测试而让您的代码更复杂是否值得,尽管您可能会争辩说向异步函数添加回调具有通用用途。

另一种方法是让测试使用粗略的超时。

您可以使用 Nick 提到的 ajaxSuccess(可能结合超时,和/或还捕获 ajaxError?)。但令我震惊的是,这可能为单元测试添加了太多的实现知识。如果将来 loadSomeStuff 被更改为在没有 XMLHttpRequest 的情况下工作,或者可能只在没有缓存时偶尔使用它怎么办?然后单元测试将中断。当然,您可以更新测试以匹配实现,但这并不是真正有用的单元测试,对吗?

关于javascript - 使javascript函数回调-ish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3185515/

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