我们有一个相当巨大的测试代码库(约10000行JavaScript代码),在某些情况下,我们需要关闭杂物到角度同步:
browser.ignoreSynchronization = true;
但是,问题是,我们忘记再次打开同步 ,使所有随后的测试失败了,这不清楚,需要时间和精力来调试。
有没有办法确保在测试中重新打开同步?
我们确实有基于ESLint
的静态代码分析并执行代码评论。
我只是做回试挂钩(取决于您的测试跑者),在这里我将所有内容都设置回了起始状态,因此,如果我什至忘了在测试中切换或测试崩溃,则任何时刻的原因 - 接下来的测试不会受到影响:
我的茉莉代码。量突配置:
onPrepare() {
...
afterEach(function () {
// Setting ignoreSychronization back to true, in case it was changed in tests
browser.waitForAngularEnabled(true);
// Setting back to default frame. In case test was working in iframe
browser.switchTo().defaultContent();
// This depends on your architecture. We do clean run for each test.
browser.manage().deleteAllCookies();
browser.executeScript('window.sessionStorage.clear(); window.localStorage.clear();').then(
undefined,
function (err) {
// Errors will be thrown when browser is on default data URL.
// Session and Local storage is disabled for data URLs
// This callback is needed to not crash test, and just ignore error.
});
browser.manage().timeouts().implicitlyWait(5000); // I even rewrite implicit wait back to default value, in case i touched it in tests
// Also you might want to clear indexdb storage after tests.
})
在实际代码中,我将其包装到称为resetBrowser
或类似的功能中。另外,您可以从中返回承诺,然后从Hook中返回该承诺 - 因此,新的测试将无法开始,直到应许解决
在某一时刻,当我在相同的情况下挣扎时,我创建了一个辅助功能,并在导航到新页面之前将其称为。您仍然必须"记住"才能调用该功能,但至少这只会为您处理所处理的代码中的一个位置。
isAngularSite(flag) {
browser.ignoreSynchronization = !flag;
}
,在我的代码中,我称其为 utils.isAngularSite(false);