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

时间:2018-10-01 15:25:15

标签: javascript typescript cucumber bdd cucumberjs

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

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 :(得分:1)

变形金刚的工作方式

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

这里发生的转换是网址位于各种网址数组中。

答案

在您的示例中,您提供的步骤定义与您提供的步骤不匹配。

但是,如果我们要继续进行匹配:

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.xx,因此我使用的两个示例都与它们有关。