2016-01-31 6 views
10

के साथ एक और फ़ंक्शन कॉल करता है, मैं परीक्षण करना चाहता हूं कि ES6 मॉड्यूल में कोई फ़ंक्शन Sinon.js का उपयोग करके किसी अन्य फ़ंक्शन को कॉल करता है। यहाँ मैं क्या कर रहा हूं की मूल लेआउट है:परीक्षण करें कि एक फ़ंक्शन एक ईएस 6 मॉड्यूल में Sinon.js

foo.js

export function bar() { 
baz(); 
} 

export function baz() { 
... 
} 

test.js

import sinon from 'sinon'; 
import * as Foo from '.../foo'; 

describe('bar', function() { 
    it('should call baz', function() { 
    let spy = sinon.spy(Foo, 'baz'); 
    spy.callCount.should.eql(0); 

    Foo.bar(); 

    spy.calledOnce.should.eql(true); 
    }); 
}); 

लेकिन जासूस baz() करने के लिए कॉल लेने नहीं करता है। क्या कोई अन्य तरीका है कि मैं इसे चुनने के लिए साइनऑन को अनुमति देने के लिए मॉड्यूल या परीक्षण सेट अप कर सकता हूं? मेरा विकल्प कुछ बाज़ पर कुछ बुनियादी दावा करना है, लेकिन मैं स्पष्ट रूप से ऐसा नहीं करना चाहता हूं।

जो मैंने ऑनलाइन देखा है, उससे मैं सोच रहा हूं कि यह कोड के साथ भी संभव है या नहीं, अगर मुझे यह चाहिए कि मैं इसे प्राप्त करने के लिए इसे पुन: स्थापित करूँ।

उत्तर

12

आप सोच रहे हैं कि मॉड्यूल वर्तमान में संरचित तरीके से संभव नहीं है।

जब कोड निष्पादित होने पर, function bar अंदर baz संदर्भ स्थानीय कार्यान्वयन के खिलाफ हल हो गई है। आप इसे संशोधित नहीं कर सकते क्योंकि मॉड्यूल कोड के बाहर आंतरिकों तक कोई पहुंच नहीं है।

निर्यातित गुणों तक पहुंच है, लेकिन आप इन्हें म्यूट नहीं कर सकते हैं और इसलिए आप मॉड्यूल को प्रभावित नहीं कर सकते हैं।

एक तरह से बदलने के लिए है कि इस तरह कोड का उपयोग कर रहा है:

let obj = {}; 
obj.bar = function() { 
this.baz(); 
} 

obj.baz = function() { 
... 
} 

export default obj; 

अब अगर आप आयातित वस्तु में baz ओवरराइड आप bar के आंतरिक भागों को प्रभावित करेगा।

ऐसा कहकर, यह बहुत घबराहट महसूस करता है। व्यवहार को नियंत्रित करने के अन्य तरीके निर्भरता इंजेक्शन जैसे मौजूद हैं।

इसके अलावा, आपको यह विचार करना चाहिए कि baz कहलाता है या नहीं। मानक "ब्लैक-बॉक्स परीक्षण" में, आपको परवाह नहीं है कि कुछ किया जाता है, आप केवल यह देखते हैं कि यह किस दुष्प्रभाव उत्पन्न करता है। इसके लिए, परीक्षण करें कि आपके द्वारा अपेक्षित दुष्प्रभाव क्या हुआ और कुछ और नहीं किया गया था।

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। मैंने जितना सोचा, और मुझे लगा कि मुझे एक और ब्लैक-बॉक्स दृष्टिकोण लेना होगा। – kurtmarcink

संबंधित मुद्दे