2017-02-24 12 views
5

मैं मोचा से जस्ट करने के लिए स्वैप कर रहा हूं, और मुझे आश्चर्य है कि प्रतिक्रिया विधि पर जासूसी करने का कोई तरीका है या नहीं। उदाहरण कहना मैं अपने घटक में निम्न विधि देता है के लिए (SDK पुस्तकालय पर ध्यान न दें, यह सिर्फ एक jQuery ajax कॉल निर्माण करती है):कार्यक्षमता पर जेस्ट जासूस

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

सिनोन का उपयोग करते हुए मैं बहुत तरह प्रोटोटाइप पर जासूसी करके इसकी जांच होगी:

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

यह विधि को मजाक किए बिना कोड कवरेज सुनिश्चित करेगा। क्या जेस्ट में समान कार्यक्षमता है?

संपादित करें: यदि यह कार्यक्षमता मौजूद नहीं है, तो एपीआई कॉल का परीक्षण करने के लिए अगली सबसे अच्छी रणनीति क्या है?

उत्तर

6

वहाँ spyOn विधि, करता है कि आप के लिए

3

वास्तव में क्या देख रहे हैं आप नए spyOn विधि के लिए जा सकते हैं या निम्न चाहिए भी अच्छा काम है, कि v19 के साथ पेश किया गया था कुछ दिन पहले।

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

वही व्यवहार नहीं है जैसा कि 'sinon.spy' में है, क्योंकि यह' getData' को ओवरराइट करेगा, जबकि 'sinon.spy' और' jest.spyOn' भी मूल विधि को कॉल करेगा। –

+0

सही! .. उत्तर तय किया –

1

वास्तव में आप jest.spyOn jest.spyOn

उपयोग कर सकते हैं विधि कहा जाता है जब घटक बनाया उपयोग:

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

या आप अपने डोम और विधि प्रयोग में यह पूछना चाहते हैं तो बाँध आप उपयोग कर सकते हैं:

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) 
    }); 
}) 
संबंधित मुद्दे