所以我有一个Cucumberjs / puppeteer框架。我想知道世界上是否有一种方法可以访问传递的黄瓜标签(例如:@smokeTest)。
答案 0 :(得分:1)
根据文档https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md,world和hooks文件中的world都可以作为“ this”访问。
选项1:
根据您的请求,您可以尝试以下方式获取当前正在执行的代码:
1)创建一个名为hooks的文件 2)添加
Before({tags: '@tagName'}, async function() {
this['tags'] = [];
this['tags'].push('@tagName');
console.log(this);
});
3)在这种情况下,如果您的方案中的标记名称与钩子文件中的功能标记名称之前的功能匹配,则相应的标记名称将添加到“此”对象中。
以下输出将在控制台中打印:
{
tags:[ '@tagName' ]
}
以下是tagName的示例,可以将其替换为任何名称(根据您的要求,它为@SmokeTest),并且输出将采用以下格式:
{
tags:[ '@SmokeTest' ]
}
选项2: 希望您在npm脚本中传递标签名称,例如--tags = @ tagName。 如果您控制台process.argv,它将打印您在该npm脚本中传递的所有命令,包括Array格式的'--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' ]
}
答案 1 :(得分:0)
您可以使用pickle object from Gherkin在Before
挂钩中访问所有标签的列表以及有关场景的其他信息:
Before(function ({ pickle }) {
this.tags = pickle.tags.map(i => i.name);
});
将tags
数组添加到world对象之后,您可以从方案中的任何步骤定义中访问它。