我正在努力等待异步函数完成。特别是,我发现这两种方法在测试继续之前等待异步函数完成,但不知道区别(如果有的话):
cy.then(() => myAsyncFunction())
cy.wrap(null).then(() => myAsyncFunction())
我的目标是在实际测试开始之前等待
beforeEach()
块中的两个异步函数:
beforeEach(() => {
myAsyncFunction1() // This function has to be completed before the next one starts
myAsyncFunction2() // This function has to be completed before the test continues
// Only when myAsyncFunction2() has completed the actual tests should start
});
我尝试通过 Google 搜索差异,并查看了 Cypress 的文档,但遗憾的是没有找到其行为方式的答案。
cy.then()
和cy.wrap(null).then()
之间有一些区别:
cy.then()
- 用于在继续之前等待上一个 Cypress 命令的结果。由于beforeEach()
中没有先前的命令,因此cy.then()
将不起作用。
cy.wrap(null).then()
- 其工作原理是包装一个空值并将 .then()
链接到其上。这允许您在测试运行之前执行异步代码。
重试 - 只有在 Cypress 命令之后链接的命令(如
cy.get()
)才会在失败时自动重试。 cy.wrap(null).then()
不会重试。
Yielding -
cy.then()
产生上一个命令的结果,而 cy.wrap(null).then()
始终产生 null。