【发布时间】:2021-08-20 05:09:45
【问题描述】:
比如说我有下面的代码,一个简单的 UI 测试。
async function testMyCoolUI() {
await uiFramework.openMyApp(url);
await sleep(2000);
await uiFramework.clickButtonX();
await uiFramework.clickButtonY();
}
现在添加了一个新要求。在测试期间的任何点,屏幕上可能会弹出一个窗口说“你是机器人吗?”,我们必须选择“否”。
您将如何构建您的测试,以使该“进程”可以在测试的后台持续运行,并注意此弹出窗口?我最初的想法是启动一个异步函数轮询弹出窗口,但不要等待testMyCoolUI 中的承诺。
async function testMyCoolUI() {
await uiFramework.openMyApp(url);
await sleep(2000);
startPollingForPopup(); // this is an async function, but not waiting on it
await uiFramework.clickButtonX();
await uiFramework.clickButtonY();
}
但是这感觉不对,承诺将无法解决,并且流程不会很好地清理。在 JS 中“正确”执行此操作的方法是什么?
其他想法:
Promise.all([testMyCoolUI, pollForPopup]);
但在这种情况下,测试仍将在轮询解决之前完成。出于同样的原因,Promise.race 在这里也不起作用。
【问题讨论】:
标签: javascript node.js asynchronous async-await