2015-02-18 20 views
9

Chcę przetestować metody AJAX (wanilia XHR) i nie mogę znaleźć sposób, aby zrobić to z Jest framework. Znalazłem mock-ajax.js dla Jasmine, problem polega na tym, że nie mogę znaleźć sposobu na zainstalowanie go.Testowanie XHR w Jest

Czy istnieje lepszy sposób na test jednostkowy funkcji Ajax w jest?

Odpowiedz

8

Możesz przetestować XHR w Jest bez dodatkowych pakietów. Jest to funkcja pomocnika, który tworzy atrapa obiektu XMLHttpRequest dla:

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

I można go używać w teście następująco:

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

myślę, że to jest teraz 'jest.fn() mockImplementation' z [DOCS] (https://facebook.github.io /jest/docs/en/mock-function-api.html#mockfnmockimplementationfn) – Peter

3

JEST API zmienił się ani trochę. To jest to, czego używam. Nie robi nic, ale wystarczy, aby wyrenderować moje komponenty.

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

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

iw pliku testowego.

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