javascript - 如何使用 Jasmine 自定义记者发布失败的规范列表以发布到松弛?

标签 javascript jasmine protractor slack-api e2e-testing

我正在尝试使用自定义 jasmine 报告器并获取 specDone 函数中所有失败规范的列表:

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

在哪里 failedExpectations将存储失败规范的完整列表,我需要在 afterLaunch 中访问它 Protractor 配置文件中的函数。但由于每次运行新规范时都会加载配置文件,因此它基本上会被覆盖,并且范围限定使得我无法在 afterLaunch 中访问它。函数,这就是我调用 slack api 的地方。有没有办法做到这一点?

这就是我所基于的:http://jasmine.github.io/2.1/custom_reporter.html

最佳答案

我认为最好的方法是使用@slack/web-api 在每个规范(*或每个“它”和“描述”)之后异步发布结果。这样您就不必担心覆盖。基本上,您在测试运行期间“收集”所有结果并在下一个套件开始之前发送它。
请记住,所有这些都应该作为一个类(class)来完成。
首先你准备好你的'@slack/web-api',所以安装它(https://www.npmjs.com/package/@slack/web-api)。

npm i -D '@slack/web-api'
然后将其导入您的记者:
import { WebClient } from '@slack/web-api';
并用你的 token 初始化它。 (https://slack.com/intl/en-pl/help/articles/215770388-Create-and-regenerate-API-tokens):
this.channel = yourSlackChannel;
this.slackApp = new WebClient(yourAuthToken);
不要忘记邀请您的 Slack 应用程序加入 channel 。
然后根据您的需要和可能性准备您的结果“界面”。例如:
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);
    }
注意:这只是基于我的记者的草稿。 我只是想向您展示流程。我正在查看 Jasmine 自定义报告器,但这是基于“规范报告器”的 WDIO 自定义报告器。它们都非常相似,但您可能必须对其进行调整。要点是在测试期间收集结果,并在测试运行的每个部分之后发送它们。
*您可以查看以下解释:https://webdriver.io/docs/customreporter.html
我强烈推荐这个框架,你可以在上面使用 Jasmine。

关于javascript - 如何使用 Jasmine 自定义记者发布失败的规范列表以发布到松弛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232415/

相关文章:

css - 如何使用 Protractor 或 Selenium 测试@media 打印?

angularjs - 无法使用 phantomjs 运行 Protractor 测试

javascript - ES6 捆绑 CSS 的方式?

javascript - 使用canvas在几秒钟内逐像素显示图片

javascript - 如何使用 sequelize 检查记录是否更新

javascript - 配置 karma 以最后加载测试文件

javascript - 如何在没有中继器的情况下在表格中查找元素

javascript - JQuery 在 IE 中不起作用

javascript - 如何使用 Jasmine 在 Angular 中模拟 $window.location.href

angularjs - 使用AngularJS HotTowel中的vm “ControllerAs”语法从单元测试文件访问$ scope