ホームページ  >  記事  >  ウェブフロントエンド  >  リスナーが予想される CustomEvent() で呼び出されるテスト

リスナーが予想される CustomEvent() で呼び出されるテスト

王林
王林オリジナル
2024-09-04 16:38:32672ブラウズ

Test a listener is called with expected CustomEvent()

今日、テストに問題があることに気づきました (冗談)

CustomEvents を発行する関数があります

Jest テストでは、リスナーを定義し、それが予想されるイベントで呼び出されることを確認します


カスタムイベントの詳細(内部オブジェクト)を変更してみました

...そしてテストはまだ合格していましたか?

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

問題は、この行が期待どおりに機能しないことです (イベントのシリアル化に関連する問題です)

  expect(listener).toHaveBeenCalledWith(expectedEvent)

これを解決するには (そしてテストでイベントの詳細を確認するために)、「mock.calls」を次のように使用する必要があります。

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

--
読んでいただきありがとうございます。

以上がリスナーが予想される CustomEvent() で呼び出されるテストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。