Украсить пошаговую реализацию в огурце- js - PullRequest
1 голос
/ 03 марта 2020

Введение

Я использую https://github.com/cucumber/cucumber-js в машинописном тексте. Пример реализации кода выглядит как реализация среднего огурца:

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

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

Цель

Чего я хотел бы добиться, так это уметь каким-то образом украшать Given, поэтому что:

  • какое-то действие может быть вызвано перед кодом внутри Given. Допустим, для простого примера я хотел бы напечатать первый Given аргумент (поэтому Page is up and running).
  • не было бы необходимости изменять существующую реализацию шага.

Каждый шаг получил два определения функции псевдонима в index.d.ts, например:

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

1 Ответ

0 голосов
/ 16 апреля 2020

В оригинальной версии Cucumber JS было доступно больше крючков, включая beforeStep. Тем не менее, есть способ достичь этой функциональности в последних версиях фреймворка, таких как 6.0.5, используя setDefinitionFunctionWrapper. Пример:

setDefinitionFunctionWrapper(fn => async function step(...args) {
    //
    // do something before the step definition runs.
    //
    const result = await fn.apply(this, args);
    //
    // do something after the step definition runs.
    //
    return result;
});

Онлайн Пример: https://testjam.io/?p=O2wodDVOveAMdA9HKMKy

Известные ограничения и предостережения :

  • Это функция обернет каждое определение шага AND ловушкой.
  • Эта конкретная реализация предполагает, что определение шага или ловушка не используют обратный вызов.
  • Я не уверен, как заставить обратные вызовы и обещания работать здесь в то же время это возможно, но вам придется управлять этим самостоятельно, возможно, проверив тип последнего параметра и затем обработав его оттуда.
...