如何使用Jasime测试在窗口对象的onerror事件期间是否调用了函数。
我有一个模块,它公开了几个功能
//errortracking.ts
export function reportError(
msg,
url,
lineNo,
columnNo,
err,
service,
errorServer
) {
const string = msg.toLowerCase();
const substring = "script error";
let error = new Error(`Unknown error`);
if (string.indexOf(substring) > -1) {
error = new Error(msg);
} else if (err) {
error = err;
}
const errorReport: { error: Error; params: { service: string } } = {
params: { service },
error
};
errorServer.notify(errorReport);
return false;
}
然后在一个单独的模块中,将此功能设置为window.onerror
const { onerror } = window;
window.onerror = function catchAll(...args) {
onerror.apply(this, args);
return reportError.apply(this, [...args, serviceLabel, errorServer]);
};
如何在Jasmine中编写测试,以使我知道reportError始终称为window.onerror
答案 0 :(得分:0)
您可以为reportError
函数创建一个间谍,然后根据函数内部发生的事情callThrough
进行调用,以编写实际的函数,编写一个不会意外写入的伪函数数据库,或者直接保留它。
在任何情况下,都可以使用间谍对象断言某个函数已被调用:
// Import the entire module so we can use `jasmine.spyOn`, which requires
// an object and a key inside that object, but cannot handle a function object
import * as Errors from 'errortracking.ts';
jasmine.spyOn(Errors, 'reportError');
// You can check whether the function was called at al
it("calls reportError when something fails", function() {
const fail = 1 / 0;
expect(Errors.reportError).toHaveBeenCalled();
});
// Or check whether the arguments are also correct
it("calls reportError with the correct arguments", function() {
const fail = 1 / 0;
expect(Errors.reportError).toHaveBeenCalledWith(/* specific arguments */);
});