我有一个 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
.
我错过了什么吗?
我也遇到这个问题了。 我相信这是由于
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 扩展
*
字符。