Skip to content

IParameterTypeDefinition should have parameter "transformer" set to optional #1179

@hammzj

Description

@hammzj

Current behavior

export interface IParameterTypeDefinition<T, C extends Mocha.Context> {
name: string;
regexp: RegExp;
transformer: (this: C, ...match: string[]) => T;
}

transformer is required, but should be optional. If a transformer is not provided for a parameter type that returns a single capture group, then it will return the original value as a string.

However, if a parameter type has two capture groups, it needs a transformer that returns all arguments, or else it only returns only the first found argument in a capture group. That, however, does not require a transformer as the code will still execute.

Desired behavior

Make transformer be optional:

export interface IParameterTypeDefinition<T, C extends Mocha.Context> {
  name: string;
  regexp: RegExp;
  transformer?: (this: C, ...match: string[]) => T;
}

Test code to reproduce

defineParameterType({
	name: "threeChoices",
	regexp: /(now|later|maybe)/
});

defineParameterType({
	name: "someNumber",
	regexp: /(\d+)/
});


Given('call me {threeChoices}', function(choice) {
  cy.log(choice, typeof choice) // => string
});


Given('number of {someNumber}', function(x) {
  cy.log(x, typeof x) // => string
});
Feature: Demo

  Scenario Outline: Test
    * call me <choice>
    * number of 2
    * number of 3.14
    Examples:
      | choice |
      | now    |
      | later  |
      | maybe  |

Versions

  • Cypress version: 13.1
  • Preprocessor version: 18.0.6
  • Node version: 18.15.0

Checklist

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions