gpt4 book ai didi

javascript - Jasmine 异步测试

转载 作者:行者123 更新时间:2023-11-30 10:08:31 25 4
gpt4 key购买 nike

我正在尝试使用 Jasmine 2 的新 done() 回调测试异步设置的值。

我的测试基于 Jasmine 在其文档 ( http://jasmine.github.io/2.0/upgrading.html#section-Asynchronous_Specs ) 中给出的示例:

it('can set a flag after a delay', function(done) {

var flag = false,
setFlag = function() {
//set the flag after a delay
setTimeout(function() {
flag = true;
done();
}, 100);
};

setFlag();
expect(flag).toBe(true);
});

我得到的结果是“Expected false to be true”,所以我猜测它在检查标志的值之前并没有等待 done() 回调被调用。

有谁知道为什么这个测试失败了?

谢谢!

最佳答案

这是因为您在 setTimeout 被调用后立即运行您的断言,因此您没有给它足够的时间来调用将标志设置为 true 的回调。下面的代码将起作用(在 TryJasmine 运行下面的代码以查看其行为方式):

describe('flag delays', function () {
it('can set a flag after a delay', function(done) {
var flag = false,
setFlag = function() {
//set the flag after a delay
setTimeout(function() {
flag = true;
expect(flag).toBe(true);
done();
}, 100);
};

setFlag();
});
});

展望 future ,Jasmine 有一个 waitsFor方便测试定时器的方法。更好的是,Sinon.JSfaking times 提供功能,它可以跳过 setTimeout 调用并验证任何行为,而无需在测试中创建基于持续时间的依赖项。此外,您将能够像在问题中所做的那样在测试结束时编写断言,这将大大提高可读性。

关于javascript - Jasmine 异步测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27828108/

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