जवाबों:
मतभेद वहाँ प्रलेखित हैं ।
तीन इंटरफेस प्रदर्शन करने के विभिन्न शैलियों को प्रस्तुत करते हैं। अंततः, वे एक ही कार्य करते हैं। कुछ उपयोगकर्ता एक शैली को दूसरे पर पसंद करते हैं। यह कहा जा रहा है, हाइलाइट करने के लायक कुछ तकनीकी विचार भी हैं:
मुखर और उम्मीद इंटरफेस को संशोधित नहीं Object.prototype
करता है, जबकि करना चाहिए। इसलिए वे ऐसे माहौल में एक बेहतर विकल्प हैं जहाँ आप बदलाव नहीं कर सकते या नहीं करना चाहते Object.prototype
।
मुखर और उम्मीद इंटरफेस हर जगह के बारे में कस्टम संदेशों का समर्थन करते हैं। उदाहरण के लिए:
assert.isTrue(foo, "foo should be true");
expect(foo, "foo should be true").to.be.true;
संदेश "फू सत्य होना चाहिए" यदि एक बार विफल हो जाता है तो असफल दावे के साथ आउटपुट होगा। आपको इंटरफ़ेस के साथ कस्टम संदेश सेट करने का अवसर नहीं मिलता है।
(ऐतिहासिक नोट: लंबे समय के लिए इस उत्तर में कहा गया है कि एक कस्टम संदेश प्राप्त करने के लिए expect
, आपको एक वर्कअराउंड का उपयोग करना होगा। औरेलिन रिबोन ने मुझे सूचित किया कि एक संदेश को expect
दूसरे पैरामीटर के रूप में पास करना काम करता है। नतीजतन, कोई आवश्यकता नहीं है। वर्कअराउंड। मैं यह पता लगाने में सक्षम नहीं हूं कि मोचा के किस संस्करण ने इस संदेश के लिए समर्थन प्रदान करना शुरू कर दिया है, और न ही मैं यह पता लगा पाया कि डॉक्यूमेंटेशन के किस संस्करण ने पहली बार इसे प्रलेखित किया है।)
ध्यान दें कि assert.isTrue(foo)
, expect(foo).to.be.true
और foo.should.be.true
यदि आप एक कस्टम संदेश का उपयोग नहीं करते हैं, तो निम्नलिखित सभी आउटपुट और foo === 1
:
AssertionError: expected 1 to be true
इसलिए जबकि उम्मीद और इंटरफ़ेस को पढ़ने के लिए अच्छे हैं , ऐसा नहीं है कि एक इंटरफ़ेस दूसरे की तुलना में स्वाभाविक रूप से अधिक जानकारीपूर्ण है जब कोई दावा विफल हो जाता है। यह संदेश, जो सभी तीन इंटरफेस के लिए समान है, आपको यह नहीं बताता है कि आप वास्तव में क्या परीक्षण कर रहे थे, केवल यह कि आपको जो मूल्य मिला था, 1
लेकिन आप चाहते थे true
। यदि आप जानना चाहते हैं कि आप क्या परीक्षण कर रहे थे, तो आपको एक संदेश जोड़ना होगा।
expect
मोचा के नवीनतम संस्करण का उपयोग करके कोई भी कस्टम संदेश नहीं मिल सकता है
mocha
और परीक्षण में असफलता मिलती है।
मुझे उम्मीद है कि यह सरल उदाहरण उनके मतभेदों को स्पष्ट करता है
ज़ोर
var assert = require('chai').assert
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');
सभी मामलों में, मुखर शैली आपको मुखर कथन में अंतिम पैरामीटर के रूप में एक वैकल्पिक संदेश शामिल करने की अनुमति देती है। ये त्रुटि संदेशों में शामिल किए जाने चाहिए जो आपके दावे को पारित नहीं करना चाहिए।
ध्यान दें उम्मीद है और मुखर भाषा का उपयोग करने के लिए अभिकर्मकों का निर्माण करना चाहिए, लेकिन वे उस तरीके से भिन्न होते हैं जिस तरह से प्रारंभ में निर्माण किया जाता है। के मामले में, कैविटीज़ को दूर करने के लिए कुछ कैविटीज़ और अतिरिक्त टूल भी होते हैं।
उम्मीद
var expect = require('chai').expect
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);
उम्मीद है कि आप किसी भी असफल अभिकथन के लिए मनमाने संदेशों को शामिल कर सकते हैं जो हो सकता है।
var answer = 43;
// AssertionError: expected 43 to equal 42.
expect(answer).to.equal(42);
// AssertionError: topic [answer]: expected 43 to equal 42.
expect(answer, 'topic [answer]').to.equal(42);
यह तब काम आता है जब गैर-वर्णनात्मक विषयों जैसे कि बूलियन या संख्याओं के साथ उपयोग किया जा रहा हो।
चाहिए
शैली को अपेक्षित इंटरफ़ेस के रूप में समान श्रृंखलाबद्ध अभिक्रियाओं के लिए अनुमति देता है, हालाँकि यह प्रत्येक वस्तु को आपकी श्रृंखला शुरू करने के लिए संपत्ति के साथ प्रदान करता है। इंटरनेट एक्सप्लोरर के साथ उपयोग किए जाने पर इस शैली में कुछ समस्याएं हैं, इसलिए ब्राउज़र संगतता के बारे में पता होना चाहिए।
var should = require('chai').should() //actually call the function
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);
उम्मीद और चाहिए के बीच अंतर
सबसे पहले, ध्यान दें कि अपेक्षित अपेक्षा केवल अपेक्षित फ़ंक्शन का संदर्भ है, जबकि आवश्यकता के साथ, फ़ंक्शन निष्पादित किया जा रहा है।
var chai = require('chai')
, expect = chai.expect
, should = chai.should();
उम्मीद इंटरफ़ेस अपनी भाषा दावे चेनिंग के लिए एक प्रारंभिक बिंदु के रूप में एक समारोह प्रदान करता है। यह node.js और सभी ब्राउज़रों में काम करता है।
चाहिए इंटरफेस Object.prototype अपनी भाषा दावे के लिए प्रारंभिक बिंदु के रूप में एक गेटर प्रदान करने के लिए प्रदान करता है। यह Internet Explorer को छोड़कर सभी आधुनिक ब्राउज़र में नोड पर काम करता है।
expect(foo).to.equal(true, "foo should be true");