【问题标题】:Mocking es6 with mocha in Typescript在 Typescript 中用 mocha 模拟 es6
【发布时间】:2023-02-09 14:54:14
【问题描述】:

在使用 es6 模块以及混合 .js 和 .ts 文件的项目时,我正在努力正确地存根/模拟单元测试。

根据this posttestdouble 应该能够提供我需要的 ESM 模拟。但是,它需要使用--loader=testdouble才能工作,而我目前正在使用--loader=ts-node/esm。如果我尝试替换ts-node/esm,它无法找到 Typescript 文件:

错误 [ERR_MODULE_NOT_FOUND]:找不到模块 '/Users/repos/my-repo/src/models/connectionModel.js' 从进口 /Users/repos/my-repo/test/constants.tjs

connectionModel 是 ts 并按照 esm 约定导入为 .js

由于项目要求,我需要在 es6+ 中编译项目,因此删除 type: module 或设置 module: cjs 对我来说不是可行的选择。

有没有一种可行的方法来使用两个加载器,或者其他一些可行的方法来模拟 es6?

包.json:

{
  "type": "module",
  "scripts": {
     "test": mocha test/*.js test/*.spec.ts -r dotenv/config
  }
}

tsconfig.json:

{
  "compilerOptions": {
     "target": "es2016",
     "module": "es6,
     "moduleResolution": "node16"
     "allowJs": true,
     "esModuleInterop": true
  },
  "ts-node": {
     "esm": true
  }
  "include": [
     "./src/**/*",
     "test/**/*/.ts",
     "test/**/*.js"
  }
}

.mocharc.json:(从this answer 抓取)

{
   "node-option": [
      "experimental-specifier-resolution=node",
      "loader=ts-node/esm"
   ]
}

【问题讨论】:

    标签: node.js typescript unit-testing mocha.js testdoublejs


    【解决方案1】:

    .mocharc.json :

    {
      "extension": [".ts"],
      "loader": ["ts-node/esm","testdouble"],
      "recursive": true,
      "require": "dotenv/config"
    }
    

    包.json :

    {
      "type": "module",
      "scripts": {
         "test": "mocha"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 2016-10-27
      • 2020-12-03
      • 1970-01-01
      • 2020-06-21
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多