Jasmine测试中beforeAll未执行完成就提前运行test cases如何解决?
问题解决方案
测试用例早于
beforeAll执行的核心原因是错误地为describe回调函数添加了async修饰符:Jasmine的describe仅用于组织测试套件,本身不支持异步回调,添加async后Jasmine不会等待套件内的钩子逻辑执行完成,就会直接调度测试用例运行。
具体修复步骤
- 第一步:移除
describe回调的async修饰符 - 第二步:将全局超时配置从
beforeAll中移到describe顶层,或者给beforeAll单独配置超时,避免超时配置生效时机晚于默认阈值触发意外超时 - 第三步:如果需要针对单个钩子/用例设置独立超时,可在回调后追加超时时间参数,优先级高于全局配置
修改后的完整代码
describe('Testing : Protein superposition LOGIN', () => { // 超时配置移到describe顶层,也可以直接写到全局测试配置文件中 jasmine.DEFAULT_TIMEOUT_INTERVAL = 3500000; beforeAll(async function () { await browser.get(loginData.URL); await browser.refresh(); await browser.waitForAngularEnabled(true); await page.funcLogin(loginData.VALID.USERNAME, loginData.VALID.PASSWORD); await browser.waitForAngularEnabled(false); expect(await userLoginStatus.isPresent()).toBe(true); console.log('LOGIN Status : Ok'); // 也可以单独给beforeAll设置超时,不需要改全局配置,二选一即可 // }, 3500000); }); it('Check Login', async function () { try { var temp = await alerts.getPageHeaderName(); console.log("Temp Detail", temp); // 剩余测试逻辑 } catch (e) { throw new Error(e); } }) });
验证方式
修改完成后运行测试,控制台会先输出LOGIN Status : Ok,之后才会输出Temp Detail相关日志,说明执行顺序符合预期。
内容的提问来源于stack exchange,提问作者mkHun
相关产品推荐
相关产品推荐

