Javascript cumberjs中装饰步骤的实现

Javascript cumberjs中装饰步骤的实现,javascript,typescript,cucumber,cucumberjs,Javascript,Typescript,Cucumber,Cucumberjs,导言 我正在使用打字脚本。代码实现的示例看起来像普通的cucumber实现: import { Given, Then, When } from 'cucumber' Given(`Page is up and running`, function(this: World) { someFunction() }) 目标 我想要实现的是能够以某种方式装饰给定的,以便: 某些操作可以在给定的中的代码之前调用。比方说,举个简单的例子,我想先打印给定的参数(这样页

导言

我正在使用打字脚本。代码实现的示例看起来像普通的cucumber实现:

import {
    Given,
    Then,
    When
} from 'cucumber'

Given(`Page is up and running`, function(this: World) {
    someFunction()
})

目标

我想要实现的是能够以某种方式装饰给定的,以便:

  • 某些操作可以在
    给定的
    中的代码之前调用。比方说,举个简单的例子,我想先打印给定的
    参数(这样
    页面就启动并运行了
  • 不需要修改现有的step实现
每个步骤在
index.d.ts
中有两个别名函数定义,例如:

export function Given(pattern: RegExp | string, code: StepDefinitionCode): void;
export function Given(pattern: RegExp | string, options: StepDefinitionOptions, code: StepDefinitionCode): void;

在CucumberJS的原始版本中,有更多可用的钩子,包括
beforeStep
。但是,在最新版本的框架(如6.0.5)中,可以使用
setDefinitionFunctionWrapper
实现此功能。例如:

setDefinitionFunctionWrapper(fn=>async函数步骤(…args){
//
//在步骤定义运行之前执行某些操作。
//
const result=等待fn.apply(此参数为args);
//
//在步骤定义运行后执行某些操作。
//
返回结果;
});
在线示例:

已知的限制和注意事项

  • 此函数将包装每个步骤定义和挂钩
  • 这个特定的实现假设步骤定义或钩子没有使用回调
  • 我不知道如何使回调和承诺在这里同时工作,这可能是可能的,但您必须自己管理,可能需要检查最后一个参数的类型,然后从那里处理它

    • 在CucumberJS的原始版本中,有更多可用的挂钩,包括
      beforeStep
      。但是,在最新版本的框架(如6.0.5)中,可以使用
      setDefinitionFunctionWrapper
      实现此功能。例如:

      setDefinitionFunctionWrapper(fn=>async函数步骤(…args){
      //
      //在步骤定义运行之前执行某些操作。
      //
      const result=等待fn.apply(此参数为args);
      //
      //在步骤定义运行后执行某些操作。
      //
      返回结果;
      });
      
      在线示例:

      已知的限制和注意事项

      • 此函数将包装每个步骤定义和挂钩
      • 这个特定的实现假设步骤定义或钩子没有使用回调
      • 我不知道如何使回调和承诺在这里同时工作,这可能是可能的,但您必须自己管理,可能需要检查最后一个参数的类型,然后从那里处理它