Scherzen Sie die gleiche Funktion zweimal mit unterschiedlichen Argumenten

Lesezeit: 2 Minuten

Benutzeravatar von Simon Leyendecker
Simon Leyendecker

Ich bin neu bei JEST und teste derzeit eine Javascript-Komponente, die einen API-Aufruf in ihrem onComponentDidMount durchführt. Abhängig von den Rückgabedaten des Ajax-Aufrufs (API-Aufruf) zeigt meine Komponente entweder eine Tabelle oder einen einfachen Text an.

Mein JEST-Test ist ziemlich einfach, im Moment teste ich nur, um mit den aktuellen Schnappschüssen übereinzustimmen. Da mein API-Aufruf unterschiedliche Daten zurückgeben kann, kann mein Snapshot zwei verschiedene Aspekte haben: 1) einen mit einer Tabelle 2) einen mit einem einfachen Text.

Ich habe den Dienst erfolgreich so verspottet

jest.mock("/myService", () => ({
  index: (data, callback) => {
    const return = [
      {
        {...}
      },
    ]
    callback(return)
  },
}))

Meine Komponente macht das myService.index() richtig anrufen, alles, was ich ihm verschiedene Werte übergeben möchte, die es für den Rückruf verwenden wird.

So sieht es aus

it("has proper snapshot", () => {
    const props = {...}
    const component = shallow(<MyComponent {...props} />)
    expect(component).toMatchSnapshot()
  })

Dies funktioniert hervorragend für das erste Beispiel, aber ich kann anscheinend keine richtige Antwort finden, die zu mir passt. Können Sie mir helfen ? 🙂

Benutzeravatar von klugjo
Klugjo

1- Wenn Sie möchten, dass der Mock bei jedem Aufruf unterschiedliche Ergebnisse zurückgibt:

Verwenden mockReturnValueOnce

myMock
  .mockReturnValueOnce(10)
  .mockReturnValueOnce('x')
  .mockReturnValue(true);

wird zurückkehren 10 beim ersten Anruf, 'x' beim zweiten Anruf u true jederzeit danach.

2- Wenn Sie die Argumente überprüfen möchten, mit denen der Mock aufgerufen wurde:

Verwenden toHaveBeenNthCalledWith

expect(mock).toHaveBeenNthCalledWith(1, '1st call args');
expect(mock).toHaveBeenNthCalledWith(2, '2nd call arg 1', '2nd call arg 2');

werde das behaupten

  • der mock wurde mit angerufen '1st call args' beim ersten Mal hieß es -> mock('1st call args')

  • der mock wurde mit angerufen '2nd call arg 1' und '2nd call arg 2' beim zweiten Mal hieß es -> mock('2nd call arg 1', '2nd call arg 2')

3- Wenn Sie eine bestimmte Antwort basierend auf dem Funktionsparameter wünschen

Es wird von Jest standardmäßig nicht unterstützt, aber Sie können es sich ansehen jest wann was es Ihnen ermöglicht, Folgendes zu tun:

when(fn).calledWith(1).mockReturnValue('yay!')

  • Wusste nichts von toHaveBeenNthCalledWith, es sieht so praktisch aus, danke Kumpel!

    – Simon Leyendecker

    7. Februar 2020 um 13:15 Uhr

  • Wenn nur die Jest-Dokumentation so hilfreich und prägnant wäre. Danke dir.

    – Matt Trax

    15. Dezember 2020 um 16:18 Uhr

  • Können wir dies zum Testen von Hooks verwenden, die einen booleschen Wert in einer Komponente zurückgeben?

    – Sri Vineeth

    25. Juli 2022 um 1:28 Uhr

Bitte überprüfen Sie die Jest docs darauf. Sie können verschiedene Werte zurückgeben, wenn Sie eine Funktion verspotten, und einmal einen gewünschten Wert und später einen anderen Wert zurückgeben.

  • Okay, das ist schon eine große Hilfe. Aber was ist mit der Übergabe von Werten an diesen Schein? Grundsätzlich möchte ich dazu übergehen {a: 1, b:2} in einem Fall u {} in einem anderen Fall

    – Simon Leyendecker

    21. Dezember 2018 um 15:35 Uhr

1438540cookie-checkScherzen Sie die gleiche Funktion zweimal mit unterschiedlichen Argumenten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy