2012-06-26 21 views
11

के साथ हेडलेस नॉकआउट व्यूमोडेल परीक्षण मैं अपने नॉकआउट व्यूमोडल्स के हेडलेस परीक्षण करने की कोशिश कर रहा हूं। मैं जानबूझकर अपने व्यूमोडेल में किसी भी ui संरचनाओं से निपटने से बचने और वायरस को एचटीएमएल पेज पर छोड़ देता हूं।मोचा

यह चमेली में अच्छा काम करता है के बाद से यह ब्राउज़र में चलाता है, लेकिन जब मैं mocha करने के लिए स्विच, मैं नॉकआउट पर अंतिम पंक्ति जो है में चल सिर पहले खत्म:

}) (खिड़की, दस्तावेज़, नाविक);

मैं zombiejs जो एक अच्छा विकल्प हो सकता है का उपयोग करते हुए देखा है, लेकिन मैं कैसे नॉकआउट स्रोत को परिवर्तित किए बिना इसका इस्तेमाल करने पर एक अच्छी कहानी नहीं दिख रहा।

इस पर कैसे पहुंचे इस पर कोई विचार?

+0

नॉकआउट की क्या विशेषताएं आप अपना दृश्य मॉडल में की जरूरत है?यदि यह केवल अवलोकन है, तो उन्हें नकल करें और वीएम भाग का परीक्षण करते समय बाकी नॉकआउट को अनदेखा करें। – Niko

+0

मुद्दा यह है कि डीबग संस्करण के साथ, navigator.userAgent पर कॉल पर knockout.js स्क्रिप्ट (v2.1.0) त्रुटियों की शुरुआत। इसलिए, मैं व्यूमोडेल और अवलोकन/गणना/पबब भागों का परीक्षण करने के बिंदु तक नहीं पहुंच सकता। –

+0

मुझे लगता है कि ज़ोंबी आपका सबसे अच्छा सर्वश्रेष्ठ होगा क्योंकि यह डोम को अनुकरण करता है। नॉकआउट को डीओएम-मॉडल बाइंडर के रूप में लिखा गया था, न कि एक सामान्य मॉडल बांधने वाला। शायद रीढ़ की हड्डी विकास की अपनी शैली के साथ और अधिक गठबंधन हो सकता है। Glue.js भी एक अच्छा घटना बांधने की मशीन है। –

उत्तर

3

यह वर्तमान में मेरे रडार पर भी एक विषय है। मैं उम्मीदों में अपने निष्कर्षों को यहां डंप कर दूंगा कि वे आपको सही दिशा में इंगित कर सकते हैं।

संभावित मार्ग मैं पहले प्रयास करूंगा PhantomJS होगा। यह एक हेडलेस वेबकिट ब्राउज़र है, इसलिए इसमें उत्कृष्ट डोम, जेएसओएन, एचटीएमएल 5, और सीएसएस चयनकर्ता समर्थन होना चाहिए (उदाहरण के लिए works with jQuery and qUnit)।

मैं इस चुना क्योंकि यह अपने आप knockout.js, जो मैं knockout.js भंडार है, जहां एक .travis.yml फ़ाइल और इस टिप्पणी थी में खोज की द्वारा किया जाता है:

enter image description here

मैं इस बात का कोई सबूत नहीं है कि यह काम करने जा रहा है, लेकिन इसे knockout.js कोर में इसके उपयोग से प्रोत्साहित किया गया था। मुझे this runner script for knockout/phantom भी मिला जो एक महान लॉन्च पॉइंट की तरह दिखता है।

मैं भी afewexamples पाया है Node.js के माध्यम से मोचा और PhantomJS का उपयोग कर, प्रेत, और this script showing how to run mocha inside PhantomJS अंदर मोचा चलाने के लिए this lib extending grunt भी शामिल है। तो भाग कम से कम निश्चित है।

एक अन्य समाधान noted in the knockoutjs archives, knockout-node और JsDOM उपयोग करने के लिए एक व्यावहारिक डोम बनाने के लिए है, लेकिन पहली नजर में, यह भी अस्पष्ट और अपने खुद के परीक्षण वातावरण को लागू करने में परिणाम की संभावना लग रहा था।

slidedeck suggesting zombie.js नॉकआउट/नोड/आदि के साथ काम करेगा। लेकिन मुझे कुछ भी सबूत नहीं मिल रहे हैं, इसलिए मुझे इस मार्ग को पसंद नहीं आया।

+0

मैंने इसे फैंटॉमजेएस के साथ किया है और यह मेरे लिए काम करता है। YMMV। –

+1

@JohnRayner क्या आप अपने वर्कफ़्लो का वर्णन पोस्ट करना चाहते हैं? –

0

शायद ऐसा इसलिए है क्योंकि नॉकआउट बदल गया है (जैसा स्वीकार्य उत्तर पुराना है), लेकिन आज, मुझे विश्वास नहीं है कि यह आवश्यक है (अब)। आप आसानी से एक नॉकआउट व्यूमोडेल का परीक्षण कर सकते हैं। सभी मुझे क्या करने की जरूरत है अपने परीक्षण में वैश्विक ko चर सेट किया गया था:

global.ko = require('../../Website/Scripts/knockout-3.4.0.js'); 

उसके बाद, आप हमेशा की तरह अपने परीक्षण चला सकते हैं: अपने viewmodel का दृष्टांत, इस पर कोई कार्रवाई करने और जोर।

मैं a little more इसके बारे में लिखा है, लेकिन संक्षेप में, यह मेरे लिए काम करता है:

global.ko = require('../../Website/Scripts/knockout-3.4.0.js'); 

var MyViewModel = require('../../Website/Scripts/myViewModel.js').MyViewModel; 

describe('MyViewModel', function() { 
    var viewModel; 

    beforeEach(function(){ 
     viewModel = new MyViewModel(); 
    }); 

    describe('...', function() { 
     /* And so on */ 
    }); 
}); 
संबंधित मुद्दे