Cucumber JS: пользовательские типы параметров не совпадают - PullRequest
0 голосов
/ 01 октября 2018

У меня есть некоторые определения шагов, в которых используются пользовательские параметры.

const assertEntity = function(name: string, operator: string, 
                                                   otherName: string) {
    console.log(`assertAttrs with ${name} ${operator} ${otherName}`);
};

Then("{name} object is {operator} {otherName}", assertEntity);

И следующий файл функций (усеченный)

Scenario: Compare two similar API key objects
    Given we have a new ApiKey called Red

И типы параметров, определенные следующим образом

defineParameterType({
    regexp: /name/,
    transformer: function(s) {
        return s;
    },
    name: "name"
});

Однако огурец говорит, что определение шага не определено ...

? Given we have a new ApiKey called Red
   Undefined. Implement with the following snippet:

     Given('we have a new ApiKey called Red', function () {
       // Write code here that turns the phrase above into concrete actions
       return 'pending';
     });

Я считаю, что проблема в моем регулярном выражении, но я видел это в примерах, поэтому я не уверен, что делать дальше.

1 Ответ

0 голосов
/ 02 октября 2018

Как работают трансформаторы

  1. Регулярное выражение должно соответствовать параметру
  2. Выражение огурца должно соответствовать шагу при преобразовании обратно в регулярное выражение

Вы можете использовать любое разнообразие преобразований.Например:

Given I am on the "Home" page
Given I am on the "My Basket" page

Может ли преобразователь сопоставить оба:

defineParameterType({
    regexp: /"([^"]*)"/,
    transformer(string) {
        return urls[string.replace(/ /g, "_").toLowerCase()]
    },
    name: 'page',
    useForSnippets: false
});

Преобразование, которое происходит здесь, заключается в том, что URL-адрес находится в массиве различных URL-адресов.

Ответ

Для вашего примера предоставленное вами определение шага не будет соответствовать предоставленному вами шагу.

Но если мыдолжны были пойти дальше и сопоставить это:

Given we have a new ApiKey called "Red"

Используя определение шага, как это:

Given('we have a new ApiKey called {name}', function(){
     return pending
});

Нам потребуется ступенчатый преобразователь, как это:

defineParameterType({
    regexp: /"([^"]*)"/,
    transformer: function(s) {
        return s;
    },
    name: "name",
    useForSnippets: false
});

Примечание : "([^"]*)" - это не все конечное совпадение регулярного выражения, сопоставляемого с огурцом, но это было довольно стандартное регулярное выражение, которое можно было найти в определениях шагов до того, как выражения огурца вышли с 3.xx, следовательно, 2 примера, которые я использовал, с ними.

...