Protractor conf.ts声明onComplete报TS2322类型不匹配错误如何解决
问题根因
Protractor 官方的 TypeScript 类型定义中,onComplete 钩子被声明为无入参的函数类型 () => void,BrowserStack 官方文档给出的示例是基于 JavaScript 环境编写,未考虑 TS 类型校验规则,因此会抛出类型不匹配错误。
解决方案
方案1:类型断言快速绕过校验
如果确认运行时 onComplete 确实会传入测试结果参数,可以通过类型断言直接告诉 TS 编译器忽略类型匹配校验,代码修改如下:
// Code to mark the status of test on BrowserStack based on test assertions onComplete: (function (passed: boolean) { if (!passed) { browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "At least 1 assertion has failed"}}'); } else { browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "All assertions passed"}}'); } }) as () => void
方案2:通过自定义Reporter收集测试结果(更规范)
如果不想绕过类型校验,可以在onPrepare钩子中加入Jasmine自定义Reporter来全局存储测试结果,onComplete直接读取变量即可,完全符合TS类型定义要求:
// 全局存储测试结果变量 let allTestPassed = true; export const config: Config = { // 其余配置项省略 onPrepare: function() { // 加入自定义reporter收集测试失败状态 jasmine.getEnv().addReporter({ specDone: (result) => { if (result.status === 'failed') { allTestPassed = false; } } }); }, onComplete: function() { if (!allTestPassed) { browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "At least 1 assertion has failed"}}'); } else { browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "All assertions passed"}}'); } } }
内容的提问来源于stack exchange,提问作者Sharutkarsh
相关产品推荐
相关产品推荐

