2017-02-24 33 views
5

Mocha'dan şaka yapmak için takas yapıyorum ve bir tepki yöntemi üzerinde casusluk yapmanın bir yolu olup olmadığını merak ediyorum. örnek benim bileşeninde aşağıdaki yöntemi var diyelim İçin (sdk kütüphane yok saymak, sadece bir jquery ajax çağrısı oluşturur): Sinon kullanmaJest casus fonksiyonelligi

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

ben şöyle prototip casusluk tarafından bu test olacağını:

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

Bu, yönteme alay etmeden kod kapsamı sağlar. Şakada benzer işlevler var mı?

DÜZENLEME: Ayrıca, bu işlev yoksa, API çağrılarını sınamak için bir sonraki en iyi strateji nedir?

cevap

6

Eğer Yeni spyOn yöntemi için gidebiliriz

3

arayan veya aşağıdaki gerektiğini de iyi çalışır tam olarak ne yapar, yani birkaç gün önce V19 ile tanıtıldı, spyOn yöntemi yoktur. yöntemi çağrıldığında ise

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

Bu davranış aynı değil "sinon.spy" 'de olduğu gibi, 'getData' üzerine yazılırken,' sinon.spy' ve 'jest.spyOn' da orijinal yöntemi çağırır. –

+0

Doğru! .. cevabı düzeltti –

1

Aslında jest.spyOn jest.spyOn

kullanabilirsiniz zaman bileşeni oluşturulan kullanım:

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

ya da DOM ve yöntem kullanımında bağlama bunu varsa Kullanabilirsiniz:

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