如何在黄瓜中获取标签 world.object

How to get tags in cucumber world.object

所以我有一个 Cucumberjs/puppeteer 框架。我想知道是否有一种方法可以访问世界对象中传递的黄瓜标签(例如:@smokeTest)。

根据文档:https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md,世界在世界和挂钩文件中都可以作为 'this' 访问。

选项 1:

根据您的要求,您可以尝试通过以下方式获取您当前正在执行的标签:

1) 创建一个名为 hooks 的文件 2) 添加

Before({tags: '@tagName'}, async function() {
this['tags'] = [];
this['tags'].push('@tagName');
console.log(this);
});

3) 在这种情况下,当您的场景在 hooks 文件中持有与 Before function 标签名称匹配的标签名称时,相应的标签名称将添加到 'this' 对象中。

以下输出将打印在控制台中:

{
tags:[ '@tagName' ]
}

这里的 tagName 是一个示例,它可以替换为任何名称(根据您的要求,它是 @SmokeTest),输出将采用以下格式:

{
    tags:[ '@SmokeTest' ]
    }

选项 2: 希望您在 npm 脚本中传递标签名称,例如 --tags=@tagName。 如果您使用控制台 process.argv,它将打印您在该 npm 脚本中传递的所有命令,包括数组格式的“--tags=@tagName”。

使用此数组,您可以根据其长度重复一个循环并从匹配的字符串中提取 tagName,如下所示:

let option: string;
    process.argv.forEach(arg => {
        if (arg.includes('tags')) {
            option = arg;
            this['tags'] = [];
            this['tags'].push(option.replace('--tags=', ''));
        }
    });

现在,如果您控制 'this',它将包含一个名为 'tags' 的密钥,如下所示:

{
    tags:[ '@tagName' ]
    }

您可以使用 pickle object from Gherkin:

Before 挂钩中访问所有标签的列表以及有关场景的其他信息
Before(function ({ pickle }) {
    this.tags = pickle.tags.map(i => i.name);
});

tags 数组添加到世界对象后,您可以从场景中的任何步骤定义访问它。

现场演示:https://testjam.io/?p=od8QsClhFjmZB6zOsEyI