📜  在循环中使用 await 的 await 保留字 testcafe - Javascript (1)

📅  最后修改于: 2023-12-03 15:37:42.302000             🧑  作者: Mango

在循环中使用 await 的 await 保留字 testcafe - Javascript

简介

在编写 JavaScript 程序时,时常需要在循环中使用 await 的保留字来等待异步操作完成。这是使用 TestCafe 进行自动化测试时特别需要关注的一点,因为 TestCafe 对循环中的 await 声明有一定的限制。

TestCafe 中 await 的限制

在 TestCafe 中,使用 await 声明的代码行会自动创建异步函数。异步函数仅在页面中完成前调用。如果在循环中使用 await 声明时,每次迭代都会创建一个新的异步函数,这样会导致代码的执行顺序不确定,很可能会出现预期之外的结果。

为了避免这种情况发生,TestCafe 要求只有在所有迭代都完成之后才会触发 await 声明。这个限制可以通过使用 asynchronous iterator 减轻。

asynchronous iterator 的使用

TestCafe 支持 asynchronous iterator,如果你的测试对象是异步的,可以使用 asynchronous iterator 来解决上面提到的限制问题。

以下是一个使用 asynchronous iterator 的例子:

async function test (t) {
    const items = [{id: 1}, {id: 2}, {id: 3}];
    for await (const item of items) {
        await t.click('button[data-id="' + item.id + '"]');
        await t.wait(5000);
    }
}

在这个例子中,使用 asynchronous iterator 的方式可以确保按照预期顺序执行。在循环的每一次迭代中,都会等待异步操作的结果完成,然后进行下一步操作。

总结

在使用 TestCafe 进行自动化测试时,需要注意在循环中使用 await 声明的限制。可以使用 asynchronous iterator 解决这个问题,确保测试的顺序正确,从而保证测试结果的正确性。