【发布时间】:2020-08-31 22:54:00
【问题描述】:
我正在尝试找出是否能够有条件地跳过我的测试套件中的测试 it() 并处理其异步性质。
我在 Cypress 文档 https://docs.cypress.io/guides/core-concepts/conditional-testing.html 和 mochajs 文档中阅读了有关条件测试的内容 https://mochajs.org/。
我的目的是检查网站上是否显示错误,如果出现则跳过测试。否则继续断言。
我试图在赛普拉斯进行测试的 mochajs 代码 sn-p 是:
it('should only test in the correct environment', function() {
if (/* check test environment */) {
// make assertions
} else {
this.skip();
}
});
所以我在 Cypress 中得到的是:
it('shows the list', function() {
if (queryFailed()) {
this.skip();
} else {
cy.get('.list')
.should('be.visible')
}
请注意,我将it() 中的箭头函数更改为function(),以便我可以使用this。
queryFailed() 是一个检查查询是否成功的函数。
function queryFailed() {
cy.get('.spin')
.then($container => {
const htmlLoaded = $container[0].innerHTML;
if (htmlLoaded.indexOf('List') !== -1) {
return false;
}
if (htmlLoaded.indexOf('error') !== -1) {
return true;
}
cy.wait(1000);
queryFailed();
});
}
简单地说,如果我等待的div 元素的内容有“错误”,那么我知道查询失败所以我返回true,否则我返回false。
我在调试后的测试中看到的是,即使条件运行良好,JS 的异步性质也会同时执行 else 语句中的代码而不是 if。所以最终的输出就好像完全没有条件一样,因为一切都经过了测试。
有没有更好的方法来处理 JS 的这种异步特性?
【问题讨论】:
标签: javascript mocha.js cypress