You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:54:02