如何将 Hooks(之前/之后)与 cucumber-js-tsflow 一起使用?

How do I use Hooks (before / after) with cucumber-js-tsflow?

我目前正在使用 cucumber-js-tsflow 在 Typescript 中编写概念验证自动化解决方案,并且我正在尝试复制我之前在其他使用 specflow 的解决方案中实现的 Hooks 设置。

首先我想我会在 features/support/hooks.ts 位置的一个单独的 hooks 文件中添加一个 before 和 after hook,因为它是一个概念证明,我只是想让它把一些文本记录到控制台:

import { binding, before, after } from 'cucumber-tsflow';

@binding()
export class Hooks {
  @before()
  public static logMessageToConsoleBeforeTestRun(): void {
    console.log('Before test message.');
  }

  @after()
  public static logMessageToConsoleAfterTestRun(): void {
    console.log('After test message.');
  }
}

当我来到 运行 场景时,上面没有将预期的消息记录到控制台。

然后我尝试通过将上面相同的代码添加到步骤文件而不是挂钩文件并重新运行来简化事情,但它仍然没有将预期的消息写入控制台。

在创建上述代码时,我确实遵循了 cucumber-js-tsflow (https://github.com/timjroberts/cucumber-js-tsflow#readme) 的自述文件中的文档,但是没有大量的细节,我真的不确定我能做什么错过了。

有没有其他人遇到过类似的问题并且能够克服它?

我遇到了同样的问题,发现我在 运行 测试时没有包含(要求)我的挂钩文件。

我根据 this article 设置了 Typescript 和 Cucumber,我的 cucumber.js 文件必须更新以需要我的 hooks

// cucumber.js
let common = [
  'features/**/*.feature', // Specify our feature files
  '--require-module ts-node/register', // Load TypeScript module
  '--require src/step-definitions/**/*.ts', // Load step definitions
  '--require src/hooks/**/*.ts', // Load hooks
  '--format progress-bar', // Load custom formatter
  '--format node_modules/cucumber-pretty' // Load custom formatter
].join(' ');

module.exports = {
  default: common
};

您需要在挂钩文件中进行 2 处更改: 1) 不要将 hooks 文件创建为 class 2) 使用以下格式:

let { setDefaultTimeout, After, Before, AfterAll, BeforeAll } = require('cucumber');

Before({tags: '@tagName'}, async function() {

console.log('print your info');
});

当您尝试执行一个用上面代码中提到的指定标签名称标记的场景时,就会执行此块。