2015-02-18 16 views
9

Ich möchte AJAX-Methoden (Vanille XHR) testen und ich kann nicht den Weg finden, es mit Jest Framework zu tun. Ich fand mock-ajax.js für Jasmin, das Problem ist, ich kann nicht den Weg finden, es zu installieren.XHR testen in Jest

Gibt es vielleicht einen besseren Weg zu Unit Test Ajax Funktionen in Jest?

Antwort

8

Sie können XHR in Jest ohne zusätzliche Pakete testen. Dies ist Helferfunktion, die für XMLHttpRequest Mock-Objekt erstellt:

let open, send, onload, onerror; 

function createXHRmock() { 
    open = jest.genMockFn(); 

    // be aware we use *function* because we need to get *this* 
    // from *new XmlHttpRequest()* call 
    send = jest.genMockFn().mockImpl(function(){ 
     onload = this.onload.bind(this); 
     onerror = this.onerror.bind(this); 
    }); 

    const xhrMockClass = function() { 
     return { 
      open, 
      send 
     }; 
    }; 

    window.XMLHttpRequest = jest.genMockFn().mockImpl(xhrMockClass); 
} 

Und Sie können es in Test wie folgt verwenden:

it('XHR success',() => { 
    createXHRmock(); 

    // here you should call GET request 

    expect(open).toBeCalledWith('GET', 'http://example.com', true); 
    expect(send).toBeCalled(); 

    // call onload or onerror 
    onload(); 

    // here you can make your assertions after onload 
}); 
+0

Ich denke, das ist jetzt 'jest.fn() mockImplementation' aus dem [docs] (https://facebook.github.io /jest/docs/de/mock-function-api.html#mockfnmockimplementationfn) – Peter

3

Der Scherz api ein wenig verändert hat. Das ist was ich benutze. Es macht nichts, aber es ist genug, um meine Komponenten zu rendern.

const xhrMockClass =() => ({ 
    open   : jest.fn() 
, send   : jest.fn() 
, setRequestHeader: jest.fn() 
}) 

window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass) 

und in der Testdatei.

import '../../__mock__/xhr-mock.js'