Как проверить, вызывается ли функция в window.onerror - PullRequest
0 голосов
/ 01 июля 2019

Как проверить, вызывается ли функция во время события onerror объекта окна, используя Jasime.

У меня есть модуль, который предоставляет несколько функций

//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]);
  };

Как мне написать свой тест в Жасмине так, чтобы я знал, что reportError всегда называется window.onerror

1 Ответ

0 голосов
/ 01 июля 2019

Вы можете создать шпиона для функции 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 */);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...