Heim >Web-Frontend >js-Tutorial >Testen Sie, ob ein Listener mit dem erwarteten CustomEvent() aufgerufen wird.

Testen Sie, ob ein Listener mit dem erwarteten CustomEvent() aufgerufen wird.

王林
王林Original
2024-09-04 16:38:32782Durchsuche

Test a listener is called with expected CustomEvent()

Heute wurde mir klar, dass wir bei einem Test (Jest) ein Problem hatten

Wir haben eine Funktion, die CustomEvents ausgibt

In unserem Jest-Test definieren wir einen Listener und prüfen, ob er mit dem erwarteten Ereignis aufgerufen wird


Ich habe versucht, das Detail (das interne Objekt) des benutzerdefinierten Ereignisses zu ändern

... und der Test wurde trotzdem bestanden?

  test('events.voiceEvent() emits "CustomEvent{ lavoiceevent }" event', () => {
    const expectedEvent = new CustomEvent('lavoiceevent', {
      detail: { event: 'USER_SAID_HELLO_ERRRRROR' },
    });

    window.addEventListener('lavoiceevent', listener);
    events.voiceEvent('USER_SAID_HELLO');

    expect(listener).toHaveBeenCalledWith(expectedEvent); // ✅
    expect(listener).toHaveBeenCalledTimes(1);
  });

Das Problem ist, dass diese Zeile nicht wie erwartet funktioniert (es liegt an der Serialisierung der Ereignisse)

  expect(listener).toHaveBeenCalledWith(expectedEvent)

Um dieses Problem zu lösen (und dafür zu sorgen, dass unser Test die Details des Ereignisses überprüft), sollten wir „mock.calls“ wie folgt verwenden:

  test('events.voiceEvent() emits "CustomEvent{ lavoiceevent }" event', () => {
    const listener = jest.fn();
    window.addEventListener('lavoiceevent', listener);

    events.voiceEvent('USER_SAID_HELLO');

    expect(listener).toHaveBeenCalledTimes(1);
    expect(listener).toHaveBeenCalledWith(expect.any(CustomEvent));

    const ev = listener.mock.calls[0][0];
    expect(ev.type).toBe('lavoiceevent');
    expect(ev.detail.event).toBe('USER_SAID_HELLO'); // ? will fail otherwise
  });

--
Danke fürs Lesen.

Das obige ist der detaillierte Inhalt vonTesten Sie, ob ein Listener mit dem erwarteten CustomEvent() aufgerufen wird.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn