自訂回報器
如果您不喜歡內建 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
,以更精確地呈現套件的狀態。