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

升级ts-node至v10后Sinon stub失效,如何调整配置解决该问题?

问题根因

该问题确实由SWC转译器的模块处理逻辑导致。SWC为了提升性能默认开启了静态优化,同一个模块内部的函数互相调用时,会直接绑定函数本身的原始引用,而非绑定模块exports对象上的导出值。你用Sinon stub的是模块导出对象上的getAWSLambda,但AWSLambda类构造函数里实际调用的是SWC优化后的内部原始函数,和你stub的不是同一个引用,因此stub失效。

解决方案

提供三种可选方案,可根据自身需求选择:

方案1:调整SWC转译配置(推荐,无需修改业务代码)

在tsconfig.json的ts-node配置段新增SWC的转译规则,关闭模块静态优化,保留SWC的转译速度优势:

{
  "compilerOptions": {
    // 原有配置保持不变
  },
  "ts-node": {
    "transpileOnly": true,
    "transpiler": "ts-node/transpilers/swc-experimental",
    "swc": {
      "jsc": {
        "transform": {
          "commonjs": {
            "strict": false,
            "importInterop": "node"
          }
        }
      }
    }
  }
}

方案2:修改业务代码兼容stub逻辑(兼容性最强)

修改lambda.ts文件,让类内部调用显式指向模块导出的方法,确保和你stub的引用一致,该方案不受转译器配置和版本影响,后续升级工具链也不会再次出现类似问题:

// file: ./lambda.ts
export const getAWSLambda = () => new AWS.Lambda({ region: AWS_DEFAULT_REGION });
export class AWSLambda {
  private readonly lambda: AWS.Lambda;
  constructor() {
    // 改为调用模块导出对象上的方法,而非直接调用内部函数
    this.lambda = exports.getAWSLambda();
  }
  // 其余代码保持不变
}

方案3:换回默认TypeScript转译器

如果不需要SWC的极速转译能力,直接移除transpiler配置项即可回退到ts-node默认的转译逻辑,不会出现stub失效问题:

"ts-node": {
  "transpileOnly": true
}

以上方案修改完成后重新运行单元测试,即可正常触发stub逻辑。

内容的提问来源于stack exchange,提问作者Rife

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:45:04