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

时间:2018-10-23 02:17:46

标签: typescript cucumber cucumberjs

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

因此,从源代码导入.ts文件后,所有依赖项都会与.js文件重复。

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

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

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

谢谢

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

代码结构:

  • 测试
    • 功能
    • stepDefinitions.ts

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

  • 测试
    • 功能
    • stepDefinitions.ts
  • 构建
    • 测试
      • stepDefinitions.js

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

  • 测试
    • 功能
    • stepDefinitions.ts
  • 构建
    • 测试
      • 功能
      • stepDefinitions.js

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

5 个答案:

答案 0 :(得分:3)

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

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

 tests
  features
    a.feature
    b.feature
  stepDefinitions
    aStep.ts

接下来,创建一个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,
};

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

tsc && ./node_modules/.bin/cucumber-js ./tests/features/ -p default

这将

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

答案 1 :(得分:0)

我没有关注您的问题吗? Cucumber与将.ts文件编译为.js文件无关,即通过打字稿来完成。如果您不希望将.ts和.js文件放在同一文件夹中,则可以将以下内容添加到tsconfig.json文件中。

"outDir": "typeScript"

这会将javascript文件输出到项目根目录下的“ typeScript”文件夹。我个人喜欢将它们放在一起,因为这样可以更容易调试。无法摆脱正在创建的.js文件,因为它们是运行javascript时所使用的。

答案 2 :(得分:0)

您不需要使用tsc编译代码,然后按照Raymond Kelly的建议在已编译的文件上运行Cucumber。您可以使用--require-module ts-node/register和打字稿翻译器来运行Cucumber。完整示例由cucumber-ts-starter

上的hdorgeval提供

答案 3 :(得分:0)

将黄瓜测试放入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(' '),
};

答案 4 :(得分:0)

您还可以使用ts-node模块来编译黄瓜steps.ts文件,因此不需要generate.js文件

例如

./node_modules/.bin/cucumber-js features --require step-definitions/*.ts  --require-module ts-node/register --format node_modules/cucumber-pretty"