带有打字稿的路径映射不适用于黄瓜测试运行器

Nin*_*ker 5 cucumber typescript cucumberjs

使用我的打字稿项目运行黄瓜 js 时,路径重新映射失败。使用相对路径很好,但不可原谅的丑陋。例如import ... from "@src/..."失败,而import ... from "../../../foo.ts"工作正常。

我的项目看起来像这样:

package.json
tsconfig.json
src/
  **/*.ts
Run Code Online (Sandbox Code Playgroud)

在里面tsconfig.json,我指定重映射路径:

  "paths": {
    "@src/*": [
      "src/*"
    ],
    "*": [
      "node_modules/*",
      "src/types/*"
    ]
Run Code Online (Sandbox Code Playgroud)

我的命令行如下所示:

cucumber-js 'src/**/*.feature' --require-module ts-node/register --require 'src/**/*.steps.ts' --format-options '{"snippetInterface": "async-await"}' --format json:reports/cucumber-report.json --format summary --logLevel=error 
Run Code Online (Sandbox Code Playgroud)

和堆栈跟踪:

Error: Cannot find module '@src/context/Bar'
  at Function.Module._resolveFilename (module.js:513:15)
  at Function.Module._load (module.js:463:25)
  at Module.require (module.js:556:17)
  at require (internal/module.js:11:18)
  at Object.<anonymous> (.../foo.steps.ts:4:1)
  at Module._compile (module.js:612:30)
  at Module.m._compile (.../node_modules/ts-node/src/index.ts:414:23)
  at Module._extensions..js (module.js:623:10)
  at Object.require.extensions.(anonymous function) [as .ts] (.../node_modules/ts-node/src/index.ts:417:12)
  at Module.load (module.js:531:32)
  at tryModuleLoad (module.js:494:12)
  at Function.Module._load (module.js:486:3)
  at Module.require (module.js:556:17)
  at require (internal/module.js:11:18)
  at supportCodePaths.forEach.codePath (.../node_modules/cucumber/lib/cli/index.js:142:42)
Run Code Online (Sandbox Code Playgroud)

路径映射在这种情况下根本不起作用——尤其是cucumber-js。我究竟做错了什么?我已经改组了 CLI 参数、文件,但不走运。请帮忙?

Nin*_*ker 6

该项目没有任何问题,但黄瓜不知道路径映射机制,因为--require-module ts-node/register它提供了语言绑定,但没有必要的路径解析智能。

为此,您需要: --require-module tsconfig-paths/register

安装 tsconfig-paths

npm install --save-dev tsconfig-paths
Run Code Online (Sandbox Code Playgroud)

注册模块

./node_modules/.bin/cucumber-js ... \
   --require-module ts-node/register \
   --require-module tsconfig-paths/register \
   ...
Run Code Online (Sandbox Code Playgroud)

然后,体验光荣的测试成功!