如何制作一个失败的规格清单使用茉莉自定义记者发布到slack

How to make a list of failed specs using jasmine custom reporter to post to slack?

本文关键字:自定义 单使用 slack 何制作 一个 失败      更新时间:2023-09-26

我正在尝试在一个定制的茉莉记者工作,并在specDone函数中获得所有失败规格的列表:

specDone: function(result) {
    if(result.status == 'failed') {          
        failedExpectations.push(result.fullName);
        console.log(failedExpectations);         
    }       
}

其中failedExpectations将存储失败规格的完整列表,我需要在量度器配置文件中的afterLaunch函数中访问此列表。但是由于配置文件每次加载一个新的规范运行时,它基本上被覆盖,作用域是这样的,我不能在afterLaunch函数中访问它,这就是我调用slack api的地方。有办法做到这一点吗?

这是我有它的基础:http://jasmine.github.io/2.1/custom_reporter.html

我认为最好的方法是在每个spec(*)或每个"it"之后异步发布结果。和"描述")使用@slack/web-api。这样你就不用担心重写了。基本上你是"收集"。测试运行期间的所有结果,并在下一个套件开始之前发送。

首先你准备你的'@slack/web-api',所以安装它(https://www.npmjs.com/package/@slack/web-api)。

npm i -D '@slack/web-api'

然后将其导入到您的reporter中:

import { WebClient } from '@slack/web-api';

并用令牌初始化它。(https://slack.com/intl/en-pl/help/articles/215770388-Create-and-regenerate-API-tokens):

this.channel = yourSlackChannel;
this.slackApp = new WebClient(yourAuthToken);

别忘了邀请你的slack应用到频道。然后准备你的结果界面。根据您的需要和可能性。例如:

this.results = {
      title: '',
      status: '',
      color: '',
      successTests: [],
      fails: [],
    };

然后准备一个方法/函数来发布你的结果:

 postResultOnSlack = (res) => {
try {
  this.slackApp.chat.postMessage({
    text: `Suit name: ${res.title}`,
    icon_emoji: ':clipboard:',
    attachments: [
      {
        color: res.color,
        fields: [
          {
            title: 'Successful tests:',
            value: ` ${res.successTests}`,
            short: false
          },
          {
            title: 'Failed tests:',
            value: ` ${res.fails}`,
            short: false
          },
        ]
      }
    ],
    channel: this.channel
  });
  console.log('Message posted!');
} catch (error) {
  console.log(error);
}

当你准备好了这一切,是时候"收集"了。你的结果。所以在每个" suitStart "中记得要"清除"结果:

  suiteStarted(result) {
    this.results.title = result.fullName;
    this.results.status = '';
    this.results.color = '';
    this.results.successTests = [];
    this.results.fails = [];
  }

然后收集成功和失败的测试:

 onSpecDone(result) {
    this.results.status = result.status
 // here you can push result messages or whole stack or do both:
    this.results.successTests.push(`${test.passedExpectations}`);
    for(var i = 0; i < result.failedExpectations.length; i++) {
    this.results.fails.push(test.failedExpectations[i].message);
    }
 // I'm not sure what is the type of status but I guess it's like this:
    result.status==1 ? this.results.color = #DC143C : this.results.color = #048a04;
    }

最后发送它们:

suiteDone() {
      this.postResultOnSlack(this.results);
    }

注:这只是根据我的记者写的草稿。我只是想给你展示流程。我正在寻找茉莉自定义记者,但这是基于WDIO自定义记者基于"spec记者"。它们都很相似,但你可能要调整一下。重点是在测试过程中收集结果,并在测试运行的每个部分之后发送结果。*你可以查看这个解释:https://webdriver.io/docs/customreporter.html我强烈推荐这个框架,你可以在上面使用Jasmine。