2017-02-24 10 views
5

Zamieniam się na żart z mokki i zastanawiam się, czy istnieje sposób na szpiegowanie metody reakcji. Na przykład powiedzmy, że mam następujące metody w moim składnika (Ignoruj ​​biblioteki SDK, to właśnie konstruuje jquery wywołanie Ajax):Jest szpiegiem funkcjonalności

getData() { 
    sdk.getJSON('/someURL').done(data => { 
     this.setState({data}); 
    }); 
} 

Korzystanie sinon chciałbym przetestować przez szpiegostwo na prototypie tak:

it('should call getData',() => { 
     sinon.spy(Component.prototype, 'getData'); 
     mount(<Component />); 
     expect(Component.prototype.getData.calledOnce).to.be.true; 
    }); 

Zapewniłoby to pokrycie kodu bez drwiny z metody. Czy podobna funkcjonalność jest w żartach?

EDYCJA: Ponadto, jeśli ta funkcja nie istnieje, jaka jest następna najlepsza strategia testowania wywołań API?

Odpowiedz

6

Istnieje metoda spyOn, który został wprowadzony z V19 kilka dni temu, że robi dokładnie to, czego szukasz

3

Można iść do nowej metody spyOn lub następujące powinny również działać dobrze.

it('should call getData',() => { 
    Component.prototype.getData = jest.fn(Component.prototype.getData); 
    expect(Component.prototype.getData).toBeCalled(); 
}); 
+0

To nie to samo zachowanie jak w 'sinon.spy', ponieważ nadpisze' getData', podczas gdy 'sinon.spy' i' jest.spyOn' również wywołają oryginalną metodę. –

+0

Dobrze! ... poprawiono odpowiedź –

1

Właściwie można użyć jest.spyOn jest.spyOn

Jeśli metoda jest wywoływana, gdy komponent stworzony zastosowanie:

import { mount } from 'enzyme'; 

describe('My component',() => { 
    it('should call getData',() => { 
    const spy = jest.spyOn(Component.prototype, 'getData'); 
    mount(<Component />); 
    expect(Component.prototype.getData).toHaveBeenCalledTimes(1) 
    }); 
}) 

lub jeśli masz go w DOM i sposób użycia wiążą ty można użyć:

import { shallow } from 'enzyme'; 

describe('My component',() => { 
    it('should call getData',() => { 
    const wrapper = shallow(<Component />); 
    const instance = wrapper.instance() 
    const spy = jest.spyOn(instance, 'getData'); 
    wrapper.find('button').simulate('click') 
    expect(spy).toHaveBeenCalledTimes(1) 
    }); 
}) 
Powiązane problemy