自定义报告器

如果您不喜欢内置 Jasmine 报告器的外观,那么您始终可以自己编写报告器。

创建报告器

Jasmine 报告器只是一个具有可用正确函数的对象。创建自定义报告器时此处没有任何函数是必需的,报告器上未指定的任何函数都将被忽略。

此外,在 Jasmine 3.0 中,这些函数可以全部以套件回调中的方式为异步。通过接收 done 回调并返回 Promise 或使用 async 关键字。有关更多信息,请参阅 异步教程

可以在 API 文档中找到有关 报告器界面 的更多详细信息。

const myReporter = {
  jasmineStarted: function(suiteInfo) {
    console.log('Running suite with ' + suiteInfo.totalSpecsDefined);
  },

  suiteStarted: function(result) {
    console.log('Suite started: ' + result.description
      + ' whose full description is: ' + result.fullName);
  },

  specStarted: async function(result) {
    await somethingAsync();
    console.log('Spec started: ' + result.description
      + ' whose full description is: ' + result.fullName);
  },

  specDone: function(result) {
    console.log('Spec: ' + result.description + ' was ' + result.status);

    for (const expectation of result.failedExpectations) {
      console.log('Failure: ' + expectation.message);
      console.log(expectation.stack);
    }

    console.log(result.passedExpectations.length);
  },

  suiteDone: function(result) {
    console.log('Suite: ' + result.description + ' was ' + result.status);
    for (const expectation of result.failedExpectations) {
      console.log('Suite ' + expectation.message);
      console.log(expectation.stack);
    }
  },

  jasmineDone: function(result) {
    console.log('Finished suite: ' + result.overallStatus);
    for (const expectation of result.failedExpectations) {
      console.log('Global ' + expectation.message);
      console.log(expectation.stack);
    }
  }
};

在 Jasmine 中注册报告器

jasmine.getEnv().addReporter(myReporter);

其他备注

如果您编写自定义报告器,则应确保其处理 Jasmine 可报告的所有故障模式。注意:在 Jasmine 3.0 中报告某些故障的方式已经发生了更改。

为了提供帮助,我们有几个示例 Jasmine 套件,您可以在其中检查报告器。

故障类型 应具有报告给 jasmineDone 的全局故障、在 suiteDone处套件级别的故障以及在 specDone 处规范级别的故障。报告器应向用户显示总共 5 个错误。

排除项 应报告非-fdescribed 规范未运行。此报告器术语在 Jasmine 3.0 中已更改,现在称为 excluded,以便更准确地表示套件的状态。