TypeScript模块分辨率不为';我不太喜欢黄瓜
我正在使用TypeScript为Cumber js做一个小的概念验证。到目前为止,一切都很好……但在使用TypeScript模块分辨率不为';我不太喜欢黄瓜,typescript,cucumber,cucumberjs,Typescript,Cucumber,Cucumberjs,我正在使用TypeScript为Cumber js做一个小的概念验证。到目前为止,一切都很好……但在使用tsconfig path时,我找不到正确配置模块分辨率的方法 这是一种结构: 。 ├── 黄瓜 ├── 特征 │ └── 银行账户特征 ├── package.json ├── package-lock.json ├── 步骤定义 │ └── 银行账户 ├── 支持 │ └── 模型 │ └── 银行账户.model.ts ├── tsconfig.json └──
tsconfig path
时,我找不到正确配置模块分辨率的方法
这是一种结构:
。
├── 黄瓜
├── 特征
│ └── 银行账户特征
├── package.json
├── package-lock.json
├── 步骤定义
│ └── 银行账户
├── 支持
│ └── 模型
│ └── 银行账户.model.ts
├── tsconfig.json
└── tslint.json
我使用的是tsflow
,因此“步骤定义”如下所示:
//从“@model/bank account.model”导入{BankAccount}”//。。。麻烦
从“./support/model/bank account.model”导入{BankAccount}”;
从“chai”导入{expect};
从“CUMBURE tsflow”导入{binding,given,then,when};
@绑定()
导出类BankAccountSteps{
...
@当({int}存放时)
公共时间(金额:个){
本.账户.存款(金额);
}
...
}
…但是我不能使用@model/bank account.model
,即使我在tsconfig.json
和cucumber.js
中正确配置了它:
# file: tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
...
"paths": {
"*": ["./*"],
"@model/*": ["./support/model/*"]
},
...
"types": [
"@types/chai",
"@types/cucumber",
"node"
]
},
"exclude": ["node_modules/"],
"include": ["./step-definitions/**/*", "./support/**/*"]
}
一旦我在cucumber.js中“激活”tsconfig path
–读:uncomment“--要求模块tsconfig path/register”
,我就会收到以下错误消息:
$npm运行测试
>CumberJS——配置文件默认值
TypeError:cumber_1.Before不是函数
一次性(/home/x80486/Workshop/Development/cucumber basics/node_modules/cucumber tsflow/src/binding decorator.ts:78:3)
在/home/x80486/Workshop/Development/cucumber basics/node_modules/underline/underline.js:957:21
at/home/x80486/Workshop/Development/cucumber basics/node_modules/cucumber tsflow/src/binding decorator.ts:38:5
在装饰(/home/x80486/Workshop/Development/cumber basics/step definitions/bank account.steps.ts:5:95)
反对。(/home/x80486/Workshop/Development/cumber basics/step definitions/bank account.steps.ts:8:30)
at模块编译(内部/modules/cjs/loader.js:776:30)
在Module.m._compile(/home/x80486/Workshop/Development/cumber basics/node_modules/ts node/src/index.ts:473:23)
at Module._extensions..js(internal/modules/cjs/loader.js:787:10)
at Object.require.extensions.(匿名函数)[as.ts](/home/x80486/Workshop/Development/cucumber basics/node_modules/ts node/src/index.ts:476:12)
at Module.load(内部/modules/cjs/loader.js:653:32)
在tryModuleLoad(内部/modules/cjs/loader.js:593:12)
at Function.Module._load(内部/modules/cjs/loader.js:585:3)
at Module.require(内部/modules/cjs/loader.js:690:17)
根据需要(内部/modules/cjs/helpers.js:25:18)
位于supportcodepath.forEach.codePath(/home/x80486/Workshop/Development/cucumber basics/node_modules/cumber/lib/cli/index.js:142:42)
在Array.forEach()处
任何精通打字和/或Cucumber的人都可以了解这里发生了什么
更新 如果我删除
cucumber.js
并通过npm
脚本中的所有选项(“测试”:“cucumber js features/***/.feature--需要模块ts节点/寄存器--需要模块tsconfig路径/寄存器--需要步骤定义/***/.ts--需要支持/***.ts”
),它的工作原理如下:
另外,将
baseUrl
更改为“/”
以外的内容,例如,“/support”
,不删除cucumber.js就可以了。我看到的第一件事是在你的cucumber配置文件中,你引用的是ts文件,而不是我相信cucumber js所寻找的编译过的类型脚本。尝试:
const common = [
"features/**/*.feature",
"--require-module ts-node/register",
// "--require-module tsconfig-paths/register",
"--require step-definitions/**/*.js",
"--require support/**/*.js"
].join(" ");
此外,我不认为这是一个问题,但我总是将文件类型添加到tsconfig文件的include末尾
我一直在计划将一个带有typescript的cucumber js项目示例放到github上供人们使用,所以也许这就是我需要的动机:)不是解决这个问题的答案,但这目前正在使用
@cucumber/cumber
版本7.x
——可能是将更改后移植到以前的稳定版本
是一个正在运行的(类似于模板的项目)来测试这一点。感谢您的提示,但这会使所有场景都失败,因为它无法识别已声明的任何内容。这一行:
——要求模块ts节点/寄存器
为TypeScript制作技巧;它将在飞行中传输-类似于Jest所做的。此配置没有ECMAScript输出。感谢您共享更新!我有同样的问题,因为我使用路径别名
const common = [
"features/**/*.feature",
"--require-module ts-node/register",
// "--require-module tsconfig-paths/register",
"--require step-definitions/**/*.js",
"--require support/**/*.js"
].join(" ");