mocha 在测试 setTimeout 函数之前等待
mocha wait before testing a setTimeout function
我有一个函数在稍微延迟后调用另一个函数:
const messageboxes = {
fade: target => {
target.classList.add('fade');
window.setTimeout(messageboxes.hide, 350, target);
},
hide: el => {
el.classList.add('displayNone');
el.parentNode.removeChild(el);
}
};
这会正确添加淡入淡出 class,然后在 350 毫秒后添加 'displayNone' class 并删除元素。
在 mocha 中,我可以模拟用 jsdom 单击元素并检查 'fade' class,但要等待 350 毫秒来检查 'dislpayNone' class。
我能找到的所有示例都与 http 请求的承诺有关,但我只是想暂停一下 - 这里有解决方案吗?
这是一个快速延迟函数,您可以使用它暂停 350 毫秒,然后断言您在测试中想要的内容。
function tryDelay(delayMs){
var startMs = Date.now();
var curMs = Date.now();
while((startMs + delayMs) > curMs)
{
curMs = Date.now();
}
}
tryDelay(350);
你必须向 mocha 发出执行结束的信号:
describe('setTimeout test', function(){
it('Use `done` callback', function(done){
window.setTimeout(function(){
// Assert here.
done();
}, 350);
});
it('Return promise', function(){
return new Promise((resolve, reject) => window.setTimeout(function(){
// Assert here.
resolve();
}, 350));
});
});
我有一个函数在稍微延迟后调用另一个函数:
const messageboxes = {
fade: target => {
target.classList.add('fade');
window.setTimeout(messageboxes.hide, 350, target);
},
hide: el => {
el.classList.add('displayNone');
el.parentNode.removeChild(el);
}
};
这会正确添加淡入淡出 class,然后在 350 毫秒后添加 'displayNone' class 并删除元素。 在 mocha 中,我可以模拟用 jsdom 单击元素并检查 'fade' class,但要等待 350 毫秒来检查 'dislpayNone' class。
我能找到的所有示例都与 http 请求的承诺有关,但我只是想暂停一下 - 这里有解决方案吗?
这是一个快速延迟函数,您可以使用它暂停 350 毫秒,然后断言您在测试中想要的内容。
function tryDelay(delayMs){
var startMs = Date.now();
var curMs = Date.now();
while((startMs + delayMs) > curMs)
{
curMs = Date.now();
}
}
tryDelay(350);
你必须向 mocha 发出执行结束的信号:
describe('setTimeout test', function(){
it('Use `done` callback', function(done){
window.setTimeout(function(){
// Assert here.
done();
}, 350);
});
it('Return promise', function(){
return new Promise((resolve, reject) => window.setTimeout(function(){
// Assert here.
resolve();
}, 350));
});
});