无法在自定义茉莉花记者中写出量角器网络/性能日志

时间:2019-05-13 20:21:19

标签: jasmine protractor

作为量角器套件的一部分,我试图在测试失败后编写控制台网络日志。在afterEach()块中时,代码可以正常工作,但在自定义茉莉花记者中时,则无法执行promise。据我所知,诺言从未执行,但没有已知/显示的错误。

量角器配置(简体):

exports.config = {
  specs: ['./e2e/**/*.spec.ts'],
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      perfLoggingPrefs: {
        enableNetwork: true,
        enablePage: false,
      }
    },
    loggingPrefs: {
      performance: 'ALL',
      browser: 'ALL'
    },
  },
  onPrepare() {
    jasmine.getEnv().addReporter({
      specDone: result => {
        new ErrorReporter(browser).logNetworkError(result);
      }
    });
  },
};

ErrorReporter:

class ErrorReporter {
  constructor(browser) {
    this.browser = browser;
  }

  logNetworkError(result) {
    if(result.status === 'failed') {
// execution makes it in here
      this.browser.manage().logs().get('performance').then(function(browserLogs) {
// execution DOES NOT make it here
        browserLogs.forEach(function(log) {
          const message = JSON.parse(log.message).message;

          if(message.method === 'Network.responseReceived') {
            const status = message.params.response.status;
            const url = message.params.response.url;

            if(status !== 200 && status !== 304) {
              console.log(`----E2E NETWORK ERROR----`);
              console.log(`STATUS: [${status}]`);
              console.log(`URL: [${url}]`);
              console.log(`RESPONSE: [${log.message}]`);
            }
          }
        });
      });
    }
  }
}

module.exports = ErrorReporter;

logNetworkError()块中执行时,afterEach()方法中的代码可以完全正常工作,但是在作为自定义报告程序执行时,从不写出任何日志。我希望这也可以作为茉莉花记者。

如果无法以茉莉花报告者的身份执行此操作,是否有某种方法可以在afterEach()块中访问已执行测试的结果?我不想登录成功执行测试。

1 个答案:

答案 0 :(得分:0)

我想出了解决方案。有两个主要问题。首先是我需要在创建日志的函数中使用async和await:

  async logNetworkError(result) {
      if(result.status === 'failed') {

        const logs = await this.browser.manage().logs().get('performance');

        logs.forEach((log) => {
          const message = JSON.parse(log.message).message;

          if(message.method === 'Network.responseReceived') {
            const status = message.params.response.status;
            const url = message.params.response.url;

            if(status !== 200 && status !== 304) {
              console.log(`-----E2E NETWORK ERROR-----`);
              console.log(`TEST NAME: ${result.fullName}`);
              console.log(`STATUS: [${status}]`);
              console.log(`URL: [${url}]`);
              console.log(`RESPONSE: [${log.message}]`);
            }
          }
        });
      }
  }

问题的第二部分是另一个保存屏幕截图的记者没有asyncawait来阻止其他记者完成工作。向两个记者添加异步/等待可以解决此问题。

相关问题