我有一个用于异步加载脚本的工具,在异步测试中使用jest,但jest已经超时,无法响应脚本。如何实现此功能?
我试着按照文档的承诺写一个测试样本。
这是我的脚本加载程序代码和Jest测试代码。
function mapLoader(key, version, url) {
return new Promise((resolve, reject) => {
if (AMap) {
return resolve(AMap);
}
if (!url && (!key || !version)) {
warn('The parameter is incorrect and must contain the url attribute or the key and version attributes.');
}
const aMapUrl = url || `${defaultPath}?v=${version}&key=${key}`;
const jsApi = document.createElement('script');
jsApi.charset = 'utf-8';
jsApi.src = aMapUrl;
jsApi.onerror = reject;
jsApi.onload = () => {
if (window.AMap) {
AMap = window.AMap;
// 如果不加上 setTimeout 在本地开发时,会有一定几率导致刷新页面覆盖物无法显示在地图上。
setTimeout(() => {
resolve(AMap);
}, 0);
} else {
warn('AMap SDK Load Failure.');
}
};
document.head.appendChild(jsApi);
});
}test('test mapLoader function', () => {
return mapLoader('d2d76e2274bf5973ecfb1f68454b6f3b', '1.4.15').then(AMap => {
expect(AMap).toBe('peanut butter');
});
});Timeout -异步回调在jest.setTimeout.Error指定的5000 by超时内没有被调用:
发布于 2022-02-01 22:07:24
你必须像这样测试:
test('test mapLoader function', (done) => {
return mapLoader('d2d76e2274bf5973ecfb1f68454b6f3b', '1.4.15')
.then(AMap => {
expect(AMap).toBe('peanut butter');
done();
});
});甚至让Jest等待而不执行其他测试,直到用async关键字完成为止:
test('test mapLoader function', async (done) => {
return mapLoader('d2d76e2274bf5973ecfb1f68454b6f3b', '1.4.15')
.then(AMap => {
expect(AMap).toBe('peanut butter');
done();
});
});如果您想告诉Jest,测试应该失败,在这种情况下,您将调用done(error)。
https://stackoverflow.com/questions/57060711
复制相似问题