【问题标题】:How to get tags in cucumber world.object如何在黄瓜 world.object 中获取标签
【发布时间】:2020-01-29 14:54:34
【问题描述】:

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

【问题讨论】:

    标签: tags puppeteer cucumberjs


    【解决方案1】:

    根据文档: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' ]
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用pickle object from GherkinBefore 挂钩中访问所有标签的列表以及有关该场景的其他信息:

      Before(function ({ pickle }) {
          this.tags = pickle.tags.map(i => i.name);
      });
      

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

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

      【讨论】:

      • 谢谢 - 我在某处的某个帖子上找到了泡菜对象。 :)
      猜你喜欢
      • 2021-06-09
      • 2023-03-25
      • 2022-07-21
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多