как смоделировать EventSource, используя шутку с TS (пробовал большую часть стратегии насмешки) - PullRequest
0 голосов
/ 24 марта 2020

хотел имитировать EventSource, используя jest, но продолжал бросать ReferenceError: EventSource is not defined.

Пожалуйста, посмотрите на код. Большое спасибо!

// eventSourceHandler.ts
export default new class A() {
listenEventSource(){
    const eventSource = new EventSource(url);
    eventSource.addEventListener("something", callSomething);
    eventSource.onerror = function() {
      console.error();
      ("Failed to listen EventSource");
    };
}
}

Вот тестовый код, который я хочу смоделировать

// eventSourceHandler.spec.ts

import A from "./eventSourceHandler"
describe("xyz",() =>{
it("eventSourceHandler called", ()=> {
const mEventSourceInstance = {
        addEventListener: jest.fn(),
        onerror: jest.fn(),
        close: jest.fn(),
        onmessage: jest.fn(),
        onopen: jest.fn(),
        url: "test-url",
        readyState: 0,
        withCredentials: false,
        CLOSED: 2,
        CONNECTING: 0,
        OPEN: 1,
        removeEventListener: jest.fn(),
        dispatchEvent: jest.fn()
      };
      jest.mock("EventSource", () => {
        return {
          EventSource: jest.fn().mockImplementation(() => {
            return {
              // addEventListener: jest.fn(),
              // onerror: jest.fn()
              mEventSourceInstance
            };
          })
        };
      });
      let a = new A()
      a.listenEventSource();
      // test validation ....
});
});
});
...

Получал ReferenceError: EventSource is not defined при каждом запуске тестового кода.

ПРИМЕЧАНИЕ : Я прочитал почти все связанные посты из stackoverflow и пытался насмехаться global.EventSource, но Typescript продолжал выдавать ошибку, говоря: EventSource does not exist on type Global.

Есть ли кто-нибудь, кто хочет поделиться лучшей стратегией насмешки для этого ? Это будет высоко оценено.

Спасибо, парень ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...