2016-10-13 1 views
5

Ich habe die folgende Funktion in einer Komponente reagieren:Wie mehrere Anrufe auf Scherz überprüfen spioniert

onUploadStart(file, xhr, formData) { 
    formData.append('filename', file.name); 
    formData.append('mimeType', file.type); 
} 

dies ist mein Test, dass die zumindest den Spion genannt werden erhalten.

const formData = { append: jest.fn() }; 
const file = { name: 'someFileName', type: 'someMimeType' }; 
eventHandlers.onUploadStart(file, null, formData); 

expect(formData.append).toHaveBeenCalledWith(
    ['mimeType', 'someMimeType'], 
    ['fileName', 'someFileName'] 
); 

Aber die Behauptung funktioniert nicht

Expected mock function to have been called with: 
[["mimeType", "someMimeType"], ["fileName", "someFileName"]] 
But it was called with: 
    ["mimeType", "someMimeType"], ["filename", "someFileName"] 

Was ist der richtige Weg toHaveBeenCalledWith

Antwort

3

Die Signatur zu verwenden ist .toHaveBeenCalledWith(arg1, arg2, ...), wo arg1, arg2, ... Mittel in einem einzigen Aufruf (see).

Wenn Sie mehrere Anrufe testen wollen, nur expect es mehrere Male.

Leider habe ich noch nicht gefunden, ein Verfahren die Reihenfolge mehrerer Anrufe zu testen.

+0

Ich glaube, ich habe angesprochen, wie ein einzelnes 'expect' zu verwenden (meine Antwort weiter unten). – Andi

5

Ich konnte Mock mehrere Anrufe und überprüfen Sie die Argumente auf diese Weise:

expect(mockFn.mock.calls).toEqual([ 
    [arg1, arg2, ...], // First call 
    [arg1, arg2, ...] // Second call 
]); 

wo mockFn Ihre verspottet Funktionsnamen ist.

+2

sollte dies die "beste Antwort" sein –

Verwandte Themen