2012-11-20 11 views
6

मैं कैसे विश्व स्तर पर करने में दिलचस्पी है ब्राउज़र में फ़ाइल पिकर का बाहर नकली। विशेष रूप से, मैं सबसे में यह कर फ़ायरफ़ॉक्स में दिलचस्पी है, लेकिन एक सामान्य समाधान पसंद करेंगे।यूनिट परीक्षण के लिए ब्राउज़र में फ़ाइल पिकर का नकल कैसे करते हैं?

मैं केवल प्रदर्शित होने से फ़ाइल पिकर संवाद को रोकने के बारे में परवाह। मुझे यह ज़ोर देने में सक्षम होने की आवश्यकता नहीं है कि यह खुला है। समस्या यह है कि मेरे पास जावास्क्रिप्ट कोड के लिए यूनिट परीक्षण हैं जो फ़ाइल पिकर खोलते हैं। जब संवाद खुले, तो यह टेस्ट स्वीट के निष्पादन रुक जाता है।

एक उदाहरण की स्थिति यह है कि मैं Backbone.View की विधि का परीक्षण कर रहा हूं। वह विधि एक सबव्यू प्रस्तुत करती है, जो फ़ाइल पिकर को रेंडर होने पर खुलती है। चूंकि मैं सीधे उस सबव्यू का परीक्षण नहीं कर रहा हूं, इसलिए मैं अपने व्यवहार के हिस्सों को नकल नहीं करना चाहूंगा जब मैं केवल onRender विधि के किसी अन्य भाग को यूनिट परीक्षण में रूचि रखता हूं।

उदाहरण:

//Test file 
it("should do something", function() { 
    var view = new App.Views.SomeView(); 
    spyOn(view.modelBinder, "bind"); 
    view.render(); 
    expect(view.modelBinder.bind).toHaveBeenCalled(); 
}); 

//View file 
onRender : function() { 
    this.modelBinder.bind(this.el, this.model); 
    this.$("#thing").html(this.subview.render().el); //This line has a side effect that opens file picker 
} 

अनिवार्य रूप से, मैं नहीं चाहता कि स्पष्ट रूप से व्यवहार का कारण बनता है कि आप फ़ाइल पिकर खोले जाने के लिए है, क्योंकि यह नहीं है कि मैं क्या परीक्षण यहाँ में दिलचस्पी है बाहर नकली करना चाहते हैं। ऐसा करने से टेस्ट सूट को और अधिक भंगुर और बनाए रखने में मुश्किल होगी।

+0

का उपयोग करके आप js-परीक्षण ड्राइवर का उपयोग कर रहे हैं? – leeand00

+0

मुझे एक एहसान दें और इकाई परीक्षण जोड़ें और उस पंक्ति पर टिप्पणी करें जहां इसे प्रदर्शित करने वाला फ़ंक्शन कहा जाता है। – leeand00

+0

स्थिति के कुछ कोड और स्पष्टीकरण जोड़ा गया। –

उत्तर

0

कॉल/जासूसी/कॉल करने के लिए sinon का उपयोग करें। आप वास्तव में कॉल करने के बजाय किए जा रहे कॉल के लिए परीक्षण कर सकते हैं।

इस तरह आप परीक्षण कर सकते हैं कि फ़ंक्शन को वास्तविक फ़ंक्शन को कॉल किए बिना कॉल किया गया है जो संवाद प्रदर्शित करता है।

+0

मैं ऐसा नहीं करना चाहूंगा क्योंकि यह सूट में भिन्न होता है जो फ़ाइल पिकर को खोलने का कारण बनता है। मैं दुनिया भर में पिकर को खोलने से रोकने में सक्षम होना चाहूंगा। –

+0

इस बारे में कुछ स्पष्टीकरण जोड़ा गया है कि मैं उन विशिष्ट तरीकों/घटनाओं को क्यों रोकना नहीं चाहता हूं जिनके परिणामस्वरूप फ़ाइल पिकर खोला जा रहा है। –

+0

@AndrewHubbs यदि आपका यूनिट परीक्षण आपके द्वारा लिखे गए एपीआई के अलावा किसी एपीआई पर निर्भर है, तो आप यूनिट परीक्षण गलत कर रहे हैं, फिर यह इकाई परीक्षण के बजाय एकीकरण परीक्षण बन जाता है। – leeand00

0

अपने प्रश्न का उत्तर देने के लिए: बस मत करो।

मैं अवांछित साइड इफेक्ट से बचने के लिए subview.render() को खाली फ़ंक्शन के साथ प्रतिस्थापित कर दूंगा। आप फिर भी कहते हैं:

"मैं नहीं स्पष्ट रूप से व्यवहार का कारण बनता है कि आप फ़ाइल पिकर खोले जाने के लिए बाहर उपहास करने के लिए है क्योंकि यह है चाहता हूँ नहीं है कि मैं क्या परीक्षण में दिलचस्पी है ..."

जो थोड़ा विरोधाभासी है। यदि आप यूनिट-टेस्ट App.Views.SomeView चाहते हैं, तो आप को बाहरी सहयोगी, विशेष रूप से मजेदार नहीं करना चाहिए, और दिलचस्प नहीं होने पर, और अपनी फ़ाइल पिकर भी शामिल करना होगा। दूसरी ओर, जब आप यूनिट-परीक्षण करते हैं तो आपको SUT के साथ गड़बड़ नहीं करनी चाहिए।

मजाक वास्तव में अपने परीक्षण अधिक होने का खतरा बना लाल होने के लिए होगा, लेकिन सुनिश्चित करें कि आपके उत्पादन कोड युग्मन के बुरे रूपों (IMHO, Backbone.js क्षुधा के साथ एक आम ख़तरा से ग्रस्त नहीं है बनाने के लिए एक ही रास्ता है।)

केवल जगह है जिसमें आप फ़ाइल पिकर प्रदर्शित करने के लिए से बचने के लिए की आवश्यकता होगी, जब इकाई परीक्षण अपनी फ़ाइल पिकर ही है, उस मामले के रूप में sugested आप सिनोन का उपयोग करें या कवरेज के बिना इसे छोड़ अगर आप कर रहे हैं सकता है jQuery का उपयोग कर। याद रखें "किसी भी प्रकार का नकल न करें जो आपके पास नहीं है" नियम।

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