gpt4 book ai didi

javascript - 在测试 JavaScript 时,有什么比 setTimeout 更好的等待异步回调的方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:49 25 4
gpt4 key购买 nike

给定这段代码:

showForm = function (url) {
return $.get(url, function (html) {
$('body').append();
});
};

当使用 sinon.jsjQuery.mockjax.jsexpect.js 时,我通过了以下测试:

it("showForm calls jQuery.append", function () {

$.mockjax({
url: '/fake'
});

var spy = sinon.spy($.fn, "append");
presenter.showForm('/fake');

setTimeout(function () {
expect(spy.called).to.be.equal(true);
}, 1000);
});

使用 setTimeout 函数等待来自异步 $.get 的回调闻起来很糟糕,如果我做的太多,它会减慢我的测试套件。

不过,我觉得意图相当明确,似乎确实在测试我想要的东西。

是否有更好的方法,您能否解释一下您的答案中发生了什么?

最佳答案

将您的匿名函数作为参数传递给 show form,并在附加后的回调中调用它。为了确保它被调用,您可以使它成为一个包含错误回调的 $.ajax 请求。

通过这种方式,它会在 get 请求完成时准确调用,没有多余的时间或调用得太早。

showForm = function (url, callback) {
return $.get(url, function (html) {
$('body').append();
if(callback != undefined)
callback();
});
};

it("showForm calls jQuery.append", function () {

$.mockjax({
url: '/fake'
});

var spy = sinon.spy($.fn, "append");

presenter.showForm('/fake', function (){
expect(spy.called).to.be.equal(true);
});
});

关于javascript - 在测试 JavaScript 时,有什么比 setTimeout 更好的等待异步回调的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17787893/

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