【问题标题】:Proper usage of cucumber with typescript?用打字稿正确使用黄瓜?
【发布时间】:2019-03-27 04:05:35
【问题描述】:

我关注的是tutorial,但设置真的很糟糕。基本上它使用 typescript 将 .ts 文件转换为 .js。所以基本上用 .js 文件污染了你的整个源代码。

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

你知道如何进行正确的 typescript cucumber 测试吗?

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

或者改变cucumber的配置,从ts中查看build文件夹。

谢谢

为什么只使用 typescript 不起作用:

代码结构:

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

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

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

现在您可以看到stepDefinitions.js 不知道在哪里可以找到a.feature。如果您在 build/test 文件夹上运行 cucumber,它将找不到要运行的任何步骤功能......因为它们位于 tests 文件夹中。所以修复它的hacky方法是复制功能文件导致这种结构:

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

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

【问题讨论】:

  • cucumberjs 项目在 GitHub 上有很好的文档,可能会对您有所帮助。否则,您可以加入Cucumber slack 以获得社区的一些具体帮助。
  • @Marit 主页和常见问题解答中没有提到“打字稿”,请您指出具体链接吗?
  • 对不起,我自己不使用 typescript/javascript,但是有很多活跃的用户和提交者应该能够帮助你的 javascript 版本。

标签: typescript cucumber cucumberjs


【解决方案1】:

您不需要按照 Raymond Kelly 的建议使用 tsc 编译您的代码,然后在编译后的文件上运行 cucumber。您可以使用 --require-module ts-node/register 使用 typescript 转译器运行 cucumber。完整示例由 hdorgeval 提供,cucumber-ts-starter

编辑:提到的原始模板已通过新版本cucumber7-ts-starter进行了改进

【讨论】:

    【解决方案2】:

    您也可以使用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"
    

    【讨论】:

      【解决方案3】:

      将黄瓜测试放在 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】:

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

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

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

        接下来,创建一个作为黄瓜配置文件的 cucumber.js 文件。我使用以下配置文件,但您想做什么由您决定

            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

        【讨论】:

        • 谢谢,问题就这样解决了!我一直在寻找黄瓜中的--require 功能,但不知何故错过了。
        • 没问题,cucumber-js 的文档可以做一些清理工作来帮助人们解决这个问题。很高兴我能帮上忙。
        • 当步骤存储在打字稿文件中时,例如aStep.ts,步骤中的this 关键字是指打字稿类。如何使用黄瓜的World对象,通过.js文件中的this访问?
        • @uex 这看起来是一个单独的问题。随意提出更详细的 cucumberjs 问题,我很乐意审查和回答。
        【解决方案5】:

        我没有听懂你的问题? Cucumber 与将 .ts 文件编译为 .js 文件无关,即 typescript 这样做。如果您不希望 .ts 和 .js 文件位于同一文件夹中,则可以将以下内容添加到 tsconfig.json 文件中。

        "outDir": "typeScript"
        

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

        【讨论】:

        • 问题是我想用黄瓜+打字稿。如果您在该目录中生成文件,它们将不会读取 .feature 文件...因此您需要另一个步骤来复制该临时文件夹中的 .feature 文件...这很脏。
        • 是的,我用过黄瓜和打字稿没有任何问题。我不确定我是否理解为什么需要复制文件夹来运行不应该的功能测试。 1. 你能提供你用来运行测试的命令吗 2. 你能提供一个示例项目,我会审查它并告诉你要遵循的步骤吗?如果没有,我可以在本周的某个时候将一个存储库放在一起,并向您展示它是如何工作的。
        • 我这里没有代码...但是您需要复制功能,因为您运行的 js 文件位于 outDir 中,不知道功能文件的位置。跨度>
        • 请检查我更新的问题“为什么只使用打字稿不起作用:”
        猜你喜欢
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多