Cucumber JS:自定义参数类型不匹配

Cucumber JS: Custom parameter types not matching

我有一些使用自定义参数的步骤定义。

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"
});

但是 cucumber 说步骤定义未定义...

? 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. 正则表达式必须匹配参数
  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
});

注意"([^"]*)" 不是与 Cucumber 匹配的正则表达式的全部,但它是在步骤中找到的相当标准的正则表达式黄瓜表达式出现之前的定义 3.x.x,因此我使用的 2 个示例都是它们。