2016-04-05 5 views
5

Node.js के अनुसार पुस्तकालय documentation जोर:Node.js बनाम अन्य ज़ोर पुस्तकालयों पुस्तकालय जोर

मॉड्यूल Node.js द्वारा आंतरिक उपयोग के लिए इरादा है, लेकिन आवश्यकता के माध्यम से आवेदन कोड में इस्तेमाल किया जा सकता ('जोर')। हालांकि, जोर देना परीक्षण ढांचा नहीं है, और इसका उद्देश्य सामान्य उद्देश्य दावा पुस्तकालय के रूप में उपयोग करने का इरादा नहीं है।

मैं (कोई BDD एपीआई, केवल ज़ोर एपीआई) एक वैकल्पिक ज़ोर पुस्तकालय के रूप में Chai देख रहा था, और अंत में मुझे लगता है कि ज़ोर कार्यक्षमता बहुत समान है।

क्यों चाय का ज़ोर पुस्तकालय एक बेहतर जोर पुस्तकालय है? यह node.js की तुलना में सबकुछ करता है (उपलब्ध दावे के मामले में अधिक समृद्ध होने के अलावा, लेकिन यह सिर्फ वाक्य रचनात्मक चीनी-कोटिंग है)। निष्पादित किए गए आवेदक की कुल गणना जैसी सरल चीजें दोनों पर उपलब्ध नहीं हैं।

मैं कुछ याद आ रही है?

+1

उन्होंने यह स्पष्ट रूप से कहा है - 'जोर दें ** ** ** एक परीक्षण ढांचा नहीं है, जबकि' चाई ** ** ** है। '" उपलब्ध दावे के मामले में और अधिक समृद्ध होने के बगल में "'। आप पूछ रहे हैं कि कार और साइकिल के बीच क्या अंतर है। हां, उनमें से ** भाग ** समान हो सकते हैं, लेकिन उनका उद्देश्य पूरी तरह से अलग है। अगर आपको बस कुछ जांचने की ज़रूरत है - 'assert' का उपयोग करें। यदि आप परीक्षण कर रहे हैं - 'चाई' या कुछ इसी तरह का उपयोग करें। –

+1

node.js: assert.equal (ए, 5) चाई: asser.equal (ए, 5) क्या अंतर है। मैं एक कार के साथ साइकिल की तुलना नहीं करता। मैं इसके बदले एक सस्ती कार और एक लक्जरी की तुलना करूंगा। वे दोनों आपको वहां ले जाते हैं, एक शैली के साथ :) – fabrizi0

+1

मुझे यह भी समझ में नहीं आता कि क्यों नोड 'जोर' मॉड्यूल दस्तावेज़ सामान्य उद्देश्य दावा पुस्तकालय के रूप में उपयोग नहीं करते हैं। –

उत्तर

10

अद्यतन (अप्रैल 2017): Node.js नहीं रह गया है assert का उपयोग करने से दूर लोगों को चेतावनी देते तो नीचे दिए गए जवाब अब पुरानी हो चुकी है। हालांकि, ऐतिहासिक हित के लिए इसे छोड़ना।

यहाँ the answer I posted to a very similar question on the Node.js issue tracker है।

https://github.com/nodejs/node/issues/4532 और यूनिट परीक्षण के लिए assert का उपयोग करने के लिए प्रलेखन की सिफारिश करने के कारण अन्य मुद्दों के बारे में बताते हैं: किनारे के मामले कीड़े (या कम से कम निश्चित रूप से आश्चर्य) और गायब विशेषताएं हैं।

थोड़ा और संदर्भ: यह जानना कि अब हम क्या जानते हैं, अगर हम फिर से नोड.जेएस कोर डिजाइन/निर्माण कर रहे थे, तो assert मॉड्यूल या तो नोड.जेएस में मौजूद नहीं होगा या अन्यथा बहुत कम कार्य होंगे - काफी संभवतः केवल assert() (जो वर्तमान में assert.ok() के लिए उपनाम है)।

इसके कारण, कम से कम मेरे दृष्टिकोण से, कर रहे हैं:

  • सब सामान assert में किया जा रहा आसानी से
  • कोर प्रयासों बेहतर एक इकाई परीक्षण को परिपूर्ण से कहीं और खर्च कर रहे हैं userland में किया जा सकता है मॉड्यूल है कि userland में किया जा सकता है

वहाँ अतिरिक्त संदर्भ है कि दूसरों को यहाँ या नहीं जोड़ सकते हैं है (जैसे कि क्यों सभी चीज़ों को समान होने के रूप में, हम कोर छोटे रखने और userland में काम करने के पक्ष में होगा)। लेकिन यह तथाकथित 30,000 फुट दृश्य है।

assert के बाद से एक लंबे समय के लिए Node.js में रहा है और पारिस्थितिकी तंत्र का एक बहुत उस पर निर्भर है, हम संभावना नहीं (कम से कम के रूप में सबसे अच्छा मैं वर्तमान समय में बता सकते हैं के रूप में) कभी assert.throws() और दोस्तों के दूर करने के लिए कर रहे हैं। यह बहुत अधिक सामान तोड़ देगा। लेकिन हम लोगों को assert का उपयोग करने से हतोत्साहित कर सकते हैं और उन्हें उन उपयोगकर्ताओं द्वारा बनाए रखा गया है जो उनके बारे में गहराई से देखभाल करते हैं और जो आक्रामक रूप से एज-केस बग को ठीक करते हैं और जो समझ में आता है, वहां नई नई सुविधाएं जोड़ते हैं। तो यही सब कुछ है।

सच है, यदि आप सरल मामलों के साथ सीधा विचार कर रहे हैं, तो assert शायद आपकी आवश्यकताओं को पूरा करेगा। लेकिन अगर आपने कभी assert बढ़ाया है, तो आप chai या जो कुछ भी बेहतर हो जाएंगे। इसलिए हम लोगों को वहां शुरू करने के लिए प्रोत्साहित करते हैं। यह उनके लिए बेहतर है (आमतौर पर) और हमारे लिए बेहतर (आमतौर पर)।

मुझे आशा है कि यह सहायक होगा और आपके प्रश्न का उत्तर देगा।

+0

धन्यवाद ट्रॉट! मैं node.js. में assert() की सीमा भी समझता हूँ असल में मेरी परियोजना में मैंने चाई का उपयोग यूजरलैंड में लाइब्रेरी के रूप में किया, और मैं इसके साथ काफी खुश हूं। – fabrizi0

3

मुझे लगता है के बाद से कोई भी नहीं मुझे किसी भी अच्छा प्रतिक्रिया दे दी है मैं दोनों के साथ Node.js जोर और चाय के ज़ोर काम करने का कुछ समय के बाद अपने मूल प्रश्न पर कुछ प्रकाश प्रदान करने के लिए कोशिश करेंगे।

अंत में जवाब है कि है कार्यक्षमता के लिहाज से वे एक ही हैं। चाई के हमले का एकमात्र कारण यह है कि यदि आप कोड पढ़ते हैं तो आप परीक्षणों की बेहतर समझ प्राप्त कर सकते हैं, लेकिन यह इसके बारे में है।

उदाहरण के लिए

, Node.js के साथ एक शून्य मान के लिए परीक्षण:

ज़ोर (foo === नल);

और का उपयोग कर चाय:

assert.isNull (foo);

वे पूरी तरह से समकक्ष हैं, और node.js पर चिपके हुए आपकी निर्भरता सूची को सीमित करते हैं।

2

अस्वीकरण: मैं assertthat मॉड्यूल का लेखक हूं जो मैं इस उत्तर में संदर्भित करूंगा।

मूल रूप से, आप इस तरह के Should.js, expect.js या assertthat के रूप में नोड के स्वयं के assert मॉड्यूल के साथ सभी चीजें हैं जो आप अन्य सभी मॉड्यूल के साथ वहाँ बाहर कर सकते हैं, प्राप्त कर सकते हैं। उनका मुख्य अंतर यह है कि आप अपना इरादा कैसे व्यक्त कर सकते हैं।

शब्दार्थ शब्दों में, कोड की निम्न लाइनों सब एक दूसरे के बराबर हैं:

assert.areEqual(foo, bar); 
foo.should.be.equal(bar); 
expect(foo).to.be(bar); 
assert.that(foo).is.EqualTo(bar); 

वाक्य रचना, इसकी दो प्रमुख अंतर हैं:

पहले, should वाक्य रचना तभी काम करता है foo बराबर नहीं है null या undefined पर, इसलिए यह अन्य लोगों के लिए कम है। दूसरा, पठनीयता में एक अंतर है: जबकि assert.that(...) प्राकृतिक भाषा की तरह पढ़ता है, अन्य सभी नहीं करते हैं।

आखिरकार, चाई आपके लिए चीजों को आसान बनाने के लिए केवल कुछ दावे मॉड्यूल के आसपास एक रैपर है।

तो, एक लंबी कहानी को कम करने के लिए: नहीं, कोई तकनीकी कारण नहीं है कि एक दूसरे को पसंद क्यों किया जाए, लेकिन पठनीयता और null संगतता कारण हो सकती है। जैसे बेशक, आंतरिक रूप से, वे अलग ढंग से लागू किया जा सकता है, इसलिए हो सकता है सूक्ष्म बातें, कैसे समानता चेक किया गया है:

मुझे आशा है कि इस मदद करता है :-)

पी एस।जैसा कि अस्वीकरण में कहा गया है, मैं दृढ़ता का लेखक हूं इसलिए मैं पक्षपाती हो सकता हूं, लेकिन पिछले कुछ वर्षों में मुझे समय-समय पर स्थिति थी जहां जोरदार अन्य लोगों की तुलना में अधिक विश्वसनीय था, लेकिन जैसा कि कहा गया है, मैं हो सकता हूं झुका हुआ।

+1

धन्यवाद! यही वह है जिसे मैं सुनना चाहता था – fabrizi0

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