正确使用带有打字稿的黄瓜?

Tot*_*.js 6 cucumber typescript cucumberjs

我正在学习教程,但是设置确实很糟糕。基本上,它使用打字稿将.ts文件转换为.js。因此,基本上,.js文件会污染整个源代码。

因此,从源代码导入.ts文件后,所有依赖项都将复制为.js文件。

您知道如何进行适当的打字稿黄瓜测试吗?

一个hacky解决方案:将所有功能和所有文件复制到另一个临时文件夹,然后从那里运行。我希望黄瓜会比这成熟一些,因此在这里我的问题是?

或更改黄瓜的配置以从ts中查看build文件夹。

谢谢

为什么仅使用打字稿无法使用:

代码结构:

  • 测试
    • 一个特征
    • stepDefinitions.ts

现在,您将编译打字稿并具有以下结构:

  • 测试
    • 一个特征
    • stepDefinitions.ts
  • 建立
    • 测试
      • stepDefinitions.js

现在您可以看到stepDefinitions.js不知道在哪里可以找到a.feature。如果在build / test文件夹上运行Cucumber,它将找不到任何要运行的步骤功能...因为好,它们在tests文件夹中。因此,解决该问题的方法很复杂,就是将特征文件复制到以下结构中:

  • 测试
    • 一个特征
    • stepDefinitions.ts
  • 建立
    • 测试
      • 一个特征
      • stepDefinitions.js

现在它可以工作,但是很笨拙,我不喜欢它。

jon*_*iba 10

tsc正如 Raymond Kelly 所建议的那样,您不需要使用编译代码然后在编译后的文件上运行黄瓜。您可以使用打字稿转译器运行黄瓜--require-module ts-node/register。完整示例由cucumber-ts-starter 上的 hdorgeval 提供


Ray*_*Ray 8

根据提供的更多信息更新答案:

您应该做的第一件事是将您的功能和步骤分离到它们自己的文件夹中

 tests
  features
    a.feature
    b.feature
  stepDefinitions
    aStep.ts
Run Code Online (Sandbox Code Playgroud)

接下来,创建一个 Cucumber.js 文件,该文件将作为 Cucumber 配置文件。我使用以下配置文件,但您想做什么取决于您

    var common = [
  `--format ${
    process.env.CI || !process.stdout.isTTY ? 'progress' : 'progress-bar'
    }`,
  '--format json:./reports/cucumber-json-reports/report.json',
  '--format rerun:@rerun.txt',
  '--format usage:usage.txt',
  '--parallel 20',
  '--require ./build/tests/stepDefinitions/**/*.js',
  '--require ./build/tests/stepDefinitions/*.js',
  '--require ./build/tests/support/*.js'
].join(' ');

module.exports = {
  default: common,
};
Run Code Online (Sandbox Code Playgroud)

以上告诉黄瓜你的步骤在哪里。现在您可以从项目的根目录运行类似以下内容

tsc && ./node_modules/.bin/cucumber-js ./tests/features/ -p default
Run Code Online (Sandbox Code Playgroud)

这会

  1. 编译你的代码
  2. 运行cucumber-js 库
  3. 针对 features 文件夹运行黄瓜-js
  4. 使用您在 Cucumber.js 文件中构建的默认配置文件针对 features 文件夹运行黄瓜 js


小智 5

将 Cucumber 测试放在 src 中并进行编译tsc并不是一个真正好的做法,因为它会污染build软件运行不需要的目录,尤其是在生产环境中。

反而ts-node可以使用。跑步npm install ts-node --save-dev。这是配置文件的示例cucumber-js(所有.feature定义文件和步骤定义文件都位于/features我的设置的文件夹中):

module.exports = {
  default: [
    '--require-module ts-node/register',
    '--require ./features/**/*.ts',
    '--require ./features/*.ts',
  ].join(' '),
};
Run Code Online (Sandbox Code Playgroud)