Wie kann ich die Argumente abrufen, die in der Scherz-Mock-Funktion aufgerufen werden?

Lesezeit: 4 Minuten

Benutzer-Avatar
Bruno Quaresma

Wie kann ich die Argumente abrufen, die in der Scherz-Mock-Funktion aufgerufen werden?

Ich möchte das Objekt untersuchen, das als Argument übergeben wird.

  • Wenn ich entdecke, wie löse ich die Frage, was ist das Problem? In diese Frage füge ich keinen Code ein, weil ich nicht wusste, wie ich anfangen soll. Das war der Zweck der Frage.

    – Bruno Quaresma

    30. Januar 2017 um 20:03 Uhr

  • @PLATANIUM ähm was? Zunächst einmal steht es ihm frei, seine eigene Frage zu beantworten, vorausgesetzt, die Website erlaubt ihm dies tatsächlich. Zweitens ist seine Antwort richtig.

    – Martin Dawson

    21. November 2017 um 13:38 Uhr


Benutzer-Avatar
Bruno Quaresma

Benutz einfach mockObject.calls. In meinem Fall habe ich verwendet:

const call = mockUpload.mock.calls[0][0]

Hier ist die Dokumentation über die mock Eigentum

  • Gibt es außer der Mock-Funktion noch eine andere Möglichkeit, die Argumente der Funktion im Scherz zu erhalten?

    – Kodierer

    27. August 2018 um 11:55 Uhr

  • Vielen Dank! An andere und mein zukünftiges Ich: Wenn Sie einen Kompilierungsfehler erhalten Tuple type '[]' of length '0' has no element at index '0'. auf dem zweiten 0können Sie es umgehen, indem Sie verwenden const call = (mockUpload.mock.calls[0] as any[])[0];.

    – Cameron Hudson

    13. Dezember 2019 um 23:59 Uhr


  • Irgendwie versucht Jest, die Typen zu verfeinern, wenn Sie eine Implementierung wie übergeben jest.fn(() => "foobar")aber nicht, wenn Sie nur verwenden jest.fn()in diesem Fall calls ist vom Typ any (anstatt ein potenziell leeres Array zu sein).

    – Eric Burel

    14. Juni 2021 um 13:08 Uhr

  • Die Typen ein bisschen mehr ausgegraben: Der richtige Weg in TypeScript ist jest.fn((args) => "foobar"): explizit definieren args führt zu einer besseren Typisierung, und mock.calls[0][0] wird von TypeScript akzeptiert. Dies liegt daran, dass, wenn Sie 2 Argumente in Ihrem Mock verwenden, mock.calls[0] ist ein Array der Länge 2. Wenn Sie 1 Argument verwenden, Länge 1 und 0 Argumente => Länge 0. Verwenden Sie also in Ihrem Mock einfach die gleiche Anzahl von Argumenten, die Ihre Funktion erwartet, auch wenn Sie sie nicht verwenden.

    – Eric Burel

    14. Juni 2021 um 13:12 Uhr

  • Bezüglich der Tuple type '[]' of length '0' has no element at index '0'. Fehler: In meinem Fall hatte ich meinen Schein mit eingegeben SpyInstance ohne die beiden generischen Parameter für diesen Typ zu verstehen. SpyInstance<R, A> nimmt den Rückgabetyp an R und ein Array von Argumenttypen A. Angabe eines Typs von SpyInstance<unknown, [...unknown[]]> ermöglichte mir, eine beliebige Anzahl von Argumenten aus den Aufrufen meines Mocks ohne Fehler zu erhalten.

    – JoshuaCWebDeveloper

    13. November 2021 um 4:46 Uhr

Benutzer-Avatar
Senthil Arumugam SP

Hier ist eine einfache Möglichkeit, den übergebenen Parameter zu bestätigen.

expect(mockedFunction).toHaveBeenCalledWith("param1","param2");

  • Was ist, wenn das zweite Argument eine Funktion ist, auf die ich keinen Zugriff habe?

    – Hugo Licon

    11. Februar 2020 um 21:59 Uhr

  • Gehen Sie in diesem Fall mit diesem Ansatz vor mockUpload.mock.calls[0]

    – Senthil Arumugam SP

    12. Februar 2020 um 4:47 Uhr

  • Gleich wie andere Antwort. Dies beantwortet die Frage nicht. Er fragt nicht, wie er PRÜFEN soll, mit welchem ​​Argument es aufgerufen wurde, sondern ERHALTEN Sie dieses Argument, damit er es überprüfen kann.

    – Javi Marzan

    20. Oktober 2020 um 12:47 Uhr

  • Einverstanden. Meistens müssen wir möglicherweise überprüfen, ob die verspotteten Werte als Teil der Inspektion übergeben werden, es ist besser lesbar als Aufrufe[0][1].,

    – Senthil Arumugam SP

    21. April um 22:05 Uhr

Sie können verwenden toHaveBeenCalledWith() zusammen mit expect.stringContaining oder expect.arrayContaining() oder expect.objectContaining()

...
const { host } = new URL(url);
expect(mockedFunction).toHaveBeenCalledWith("param1", expect.stringContaining(`http://${host}...`);

  • Ich danke dir sehr! Diese Kombination war genau das, wonach ich gesucht hatte. Wenn Ihnen der erste oder zweite Parameter egal ist, können Sie auch verwenden expect.anything() darauf.

    – Souton

    13. Januar um 11:57 Uhr


ich bevorzuge lastCalledWith() Über toHaveBeenCalledWith(). Sie sind beide gleich, aber erstere ist kürzer und hilft mir, die kognitive Belastung beim Lesen von Code zu reduzieren.

expect(mockedFn).lastCalledWith('arg1', 'arg2')

Wir können der Mock-Methode eine mockImplementation hinzufügen und sie die Argumente zurückgeben lassen, die zur Auswertung verwendet werden können.

  • So wie es derzeit geschrieben steht, ist Ihre Antwort unklar. Bitte bearbeiten Sie, um zusätzliche Details hinzuzufügen, die anderen helfen zu verstehen, wie dies die gestellte Frage beantwortet. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe.

    – Jasie

    16. August um 12:30 Uhr

  • So wie es derzeit geschrieben steht, ist Ihre Antwort unklar. Bitte bearbeiten Sie, um zusätzliche Details hinzuzufügen, die anderen helfen zu verstehen, wie dies die gestellte Frage beantwortet. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe.

    – Jasie

    16. August um 12:30 Uhr

1282480cookie-checkWie kann ich die Argumente abrufen, die in der Scherz-Mock-Funktion aufgerufen werden?

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

Privacy policy