ESM 项目中的多个 TS 步骤定义

问题描述 投票:0回答:1

我有一个 ESM 项目(所以

"type": "module"
在我的
package.json
中)。 我想用黄瓜编写测试,并且我希望我的步骤定义在 ts 中。

我有这个结构:

- package.json
- test
 - features
   - thing1.feature
   - thing2.feature
 - steps
   - thing1.ts
   - thing2.ts
   - common.ts

我遵循了文档,我的脚本是:

cross-env NODE_OPTIONS="--loader ts-node/esm" cucumber-js test/features/*.feature --import test/steps/*.ts

如果步骤文件夹中有一个 ts 文件,则一切正常。如果我添加另一个文件,我会遇到奇怪的黄瓜错误。

Error: The uri (test/steps/thing1.ts) must end with .feature or .md
.

我错过了什么吗?

node.js cucumberjs
1个回答
0
投票

我也遇到这个问题了。  我相信这是由于

test/steps/*.ts
模式传递给
--import
选项的方式造成的。

如果它没有被引用(

--import test/steps/*.ts
),那么我相信
*
字符在执行
cucumber-js
之前被shell扩展 - 请参阅https://www.gnu.org/software/bash/manual/bash。 html#文件名-扩展

因此

--import test/steps/*.ts
被壳扩展为
--import test/steps/common.ts test/steps/thing1.ts test/steps/thing2.ts

因此,只有

test/steps/common.ts
被分配给
--import
选项,并且
test/steps/thing1.ts test/steps/thing2.ts
被视为 Gherkin 功能文件的路径。  这解释了您遇到的错误:
The uri (test/steps/thing1.ts) must end with .feature or .md

解决方案是引用该模式(用一对

'
字符包围它):

--import 'test/steps/*.ts'

现在

*
字符将由
cucumber-js
而不是由 shell 扩展。  这解决了我的问题。


查看最新版本的文档:

它表明该模式可以不加引号地传递给

--import
选项:

在 CLI 上

cucumber-js --import somewhere-else/support/*.js

这可能是文档中的一个错误,因为我认为始终需要引用该模式以防止 shell 扩展

*
字符。

© www.soinside.com 2019 - 2024. All rights reserved.