【发布时间】:2020-01-29 14:54:34
【问题描述】:
所以我有一个 Cucumberjs/puppeteer 框架。我想知道是否有办法访问世界对象中传递的黄瓜标签(例如:@smokeTest)。
【问题讨论】:
标签: tags puppeteer cucumberjs
所以我有一个 Cucumberjs/puppeteer 框架。我想知道是否有办法访问世界对象中传递的黄瓜标签(例如:@smokeTest)。
【问题讨论】:
标签: tags puppeteer cucumberjs
根据文档: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) 在这种情况下,当您的场景中的标签名称与钩子文件中的函数前标签名称匹配时,相应的标签名称将添加到“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 数组添加到世界对象后,您可以从场景中的任何步骤定义中访问它。
【讨论】: