在mocha中覆盖ts节点的`tsconfig.json`

Ral*_*lph 36 mocha.js node.js tsconfig

是否有可能覆盖tsconfig.json从mocha调用时使用的ts节点?

我的主要tsconfig.json包含"module": "es2015",但我只想"module": "commonjs"用于ts节点.

我试过这个

mocha --compilers ts:ts-node/register,tsx:ts-node/register \
    --compilerOptions '{"module":"commonjs"}' \
    --require ts-node/register test/**/*.spec.ts*
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Module.m._compile (/usr/lib/node_modules/ts-node/src/index.ts:406:23)
    at Module._extensions..js (module.js:422:10)
    at Object.require.extensions.(anonymous function) [as .tsx] (/usr/lib/node_modules/ts-node/src/index.ts:409:12)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)
    at /usr/lib/node_modules/mocha/lib/mocha.js:222:27
    at Array.forEach (native)
    at Mocha.loadFiles (/usr/lib/node_modules/mocha/lib/mocha.js:219:14)
    at Mocha.run (/usr/lib/node_modules/mocha/lib/mocha.js:487:10)
    at Object.<anonymous> (/usr/lib/node_modules/mocha/bin/_mocha:458:18)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:146:18)
    at node.js:404:3
Run Code Online (Sandbox Code Playgroud)

lle*_*eon 40

您需要通过TS_NODE_COMPILER_OPTIONS环境变量设置配置

unix机器上的示例代码:

TS_NODE_COMPILER_OPTIONS='{"module":"commonjs"}' \
mocha --require ts-node/register 'test/**/*.spec.{ts,tsx}'
Run Code Online (Sandbox Code Playgroud)

存储库文档中提取的解释


CLI和编程选项

环形变量用括号表示.

  • -T, --transpile-only为TypeScript(TS_NODE_TRANSPILE_ONLY)启用类型检查
  • -I, --ignore [pattern]配置输出文件缓存目录(TS_NODE_IGNORE)
  • -P, --project [path]覆盖路径模式以跳过编译(TS_NODE_PROJECT)
  • -C, --compiler [name]TypeScript JSON项目文件的路径(TS_NODE_COMPILER)
  • -D, --ignore-diagnostics [code]指定自定义TypeScript编译器(TS_NODE_IGNORE_DIAGNOSTICS)
  • -O, --compiler-options [opts]通过诊断代码忽略TypeScript警告(TS_NODE_COMPILER_OPTIONS)
  • --files要与编译器选项合并的JSON对象(TS_NODE_FILES)
  • --pretty禁用本地TypeScript节点缓存(TS_NODE_PRETTY)
  • --skip-project跳过项目配置解析和加载(TS_NODE_SKIP_PROJECT)
  • --skip-ignore跳过忽略检查(TS_NODE_SKIP_IGNORE)

  • Windows: ```cross-env TS_NODE_COMPILER_OPTIONS={\\\"module\\\":\\\"commonjs\\\"} mocha -r ts-node/register test/**/*.spec.ts - -记者=点``` (5认同)

Ste*_*gin 30

TypeScript 允许您覆盖配置文件。不是像其他解决方案中提到的那样在环境变量中硬编码 JSON,而是在环境中指定覆盖的配置路径。该TS_NODE_PROJECT环境变量可以被用于此目的。

TS_NODE_PROJECT='./tsconfig.commonjs.json'
Run Code Online (Sandbox Code Playgroud)

因此,如果您的主要配置是:

配置文件

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以创建另一个覆盖module设置的配置。

tsconfig.commonjs.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "commonjs"
  }
}
Run Code Online (Sandbox Code Playgroud)

运行 mocha 时,指定要使用的覆盖配置:

"test": "TS_NODE_PROJECT='./tsconfig.commonjs.json' mocha -r ts-node/register test/**/*.spec.ts*"
Run Code Online (Sandbox Code Playgroud)

这使得进一步定制您tsconfig的摩卡咖啡测试变得非常容易。您甚至可以ts-node直接指定该路径运行(在 mocha 之外):

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于 Windows,需要进行一些小调整:`SET TS_NODE_PROJECT=./tsconfig.commonjs.json&amp;&amp; mocha -r ts-node/register test/**/*.spec.ts` (5认同)

Lou*_*uis 17

--compilerOptions 不会工作.

您需要做的是自定义您的注册方式ts-node.我的情况与你的情况略有不同,我想要使用它test/tsconfig.json,其中包含我的测试代码所需的设置.如果我刚刚使用--require ts-node/register,它使用的默认配置不包含运行测试所需的设置.

我做的是:

  1. 创建一个文件test/tshook.js.它包含:

    require("ts-node").register({
      project: "test/tsconfig.json",
    });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我编辑了我的test/mocha.opts:

    --require test/tshook.js
    test/**/*.ts
    
    Run Code Online (Sandbox Code Playgroud)

这应该将所需的设置传递给ts-node:

require("ts-node").register({
  compilerOptions: {
    module: "commonjs",
  },
});
Run Code Online (Sandbox Code Playgroud)


Sam*_*eth 7

在package.json-脚本部分中:

"test": "TS_NODE_PROJECT=src mocha"
Run Code Online (Sandbox Code Playgroud)

在项目的src目录中获取我的tsconfig.json,覆盖默认的tsconfig.json。

OP可以通过使用test而不是src来实现相同目的

  • 我必须指定tsconfig.json文件的路径,即&lt;root&gt; /test/tsconfig.json才能使其工作 (2认同)

Wak*_*eel 6

这在 Windows 上对我有用

set TS_NODE_COMPILER_OPTIONS={\"module\":\"commonjs\"} && mocha -r ts-node/register test/unit/*.test.ts 

Run Code Online (Sandbox Code Playgroud)

这是促使我使用该解决方案的错误

(function (exports, require, module, __filename, __dirname) { import 'mocha';

Run Code Online (Sandbox Code Playgroud)