चाय: कैसे 'चाहिए' वाक्य रचना के साथ अपरिभाषित के लिए परीक्षण करने के लिए


95

इस ट्यूटोरियल का निर्माण ची के साथ एक कोणीयज एप्लिकेशन का परीक्षण करते हुए, मैं "चाहिए" शैली का उपयोग करके एक अपरिभाषित मूल्य के लिए एक परीक्षण जोड़ना चाहता हूं। यह विफल रहता है:

it ('cannot play outside the board', function() {
  scope.play(10).should.be.undefined;
});

त्रुटि के साथ "TypeError: पढ़ी जा सकने वाली संपत्ति 'को' अपरिभाषित 'होना चाहिए, लेकिन परीक्षण" पास "के साथ गुजरता है:

it ('cannot play outside the board', function() {
  chai.expect(scope.play(10)).to.be.undefined;
});

मैं इसे "चाहिए" के साथ कैसे काम कर सकता हूं?


1
यह आसान है यदि आप " assert.isUndefined(scope.play(10))
मुखर

जवाबों:


80

यह सिंटैक्स के नुकसान में से एक है। यह सभी वस्तुओं में संपत्ति को जोड़कर काम करता है, लेकिन अगर रिटर्न वैल्यू या वैरिएबल मान अपरिभाषित है, तो संपत्ति रखने के लिए कोई वस्तु नहीं है।

प्रलेखन कुछ समाधान, उदाहरण के लिए देता है:

var should = require('chai').should();
db.get(1234, function (err, doc) {
  should.not.exist(err);
  should.exist(doc);
  doc.should.be.an('object');
});

14
should.not.existमान मान्य होगा, nullतो यह उत्तर सही नहीं है। @ डैनियल का जवाब नीचे है should.equal(testedValue, undefined);:। यही स्वीकृत उत्तर होना चाहिए।
सेबेस्टियन

7
मैं मासिक आधार पर इस जवाब पर आता हूं (डॉक्स नहीं) :-)
राल्फ काउलिंग

52
should.equal(testedValue, undefined);

जैसा कि ची प्रलेखन में उल्लेख किया गया है


12
omg, समझाने के लिए क्या है? आप परीक्षण करने की उम्मीद करते हैं === अपरिभाषित तो आप इसका परीक्षण करते हैं। बहुत सारे डेवलपर्स ने सबसे पहले पहले टेस्टवैल्यू डाला और उसके बाद इसे चेन करना चाहिए और यह त्रुटि के साथ समाप्त होता है ...
daniel

5
यह बॉक्स से बाहर काम नहीं करता है और इसके लिए एपीआई प्रलेखन.equal() में नहीं पाया जाता है । मैं समझ सकता हूं कि @OurManInBananas ने स्पष्टीकरण क्यों मांगा। अपेक्षित मान के लिए एकल तर्क को स्वीकार करने की अपेक्षित जंजीर विधि के बजाय दो तर्कों को स्वीकार करने वाले फ़ंक्शन के रूप में इसका अप्रत्याशित उपयोग होना चाहिए। आप इसे केवल .should()@DavidNorman द्वारा स्वीकार किए गए उत्तर में और इस दस्तावेज़ में वर्णित रूप में लागू किए गए संस्करण का आयात / आवश्यकता और आयात करके प्राप्त कर सकते हैं ।
गुफलाम

मुझे लगता है कि आपको लगता है कि .equalवाक्यविन्यास बहुत बेहतर त्रुटि संदेश पैदा करता है क्योंकि यह आपको उन संदेशों को आउटपुट करने की अनुमति देता है जो चीजों के विफल होने पर अधिक वर्णनात्मक होते हैं
jcollum

17

अपरिभाषित के लिए परीक्षण

var should = require('should');
...
should(scope.play(10)).be.undefined;

अशक्त के लिए परीक्षण

var should = require('should');
...
should(scope.play(10)).be.null;

झूठे के लिए परीक्षण, अर्थात शर्तों में गलत माना जाता है

var should = require('should');
...
should(scope.play(10)).not.be.ok;

विशेष रूप से उपयोगी या सहज नहीं है, लेकिन यह चतुर है!
दीक्षित

2
उपयोगी नहीं? यह bdd शैली IMO में अपरिभाषित परीक्षण के लिए सर्वोत्तम उत्तर है, हालाँकि इसे अन्य npm पैकेज (चाहिए पैकेज) को स्थापित करने की आवश्यकता है, और मुझे नहीं लगता कि इसके लिए अन्य पैकेज स्थापित करने लायक है, हालांकि भयानक उत्तर
वैगनर लियोनार्डी


8

मैंने अपरिभाषित परीक्षणों के लिए कथन को लिखने के लिए संघर्ष किया। निम्नलिखित काम नहीं करता है।

target.should.be.undefined();

मुझे निम्नलिखित उपाय मिले।

(target === undefined).should.be.true()

अगर यह भी एक प्रकार की जाँच के रूप में लिख सकते हैं

(typeof target).should.be.equal('undefined');

सुनिश्चित नहीं है कि ऊपर सही तरीका है, लेकिन यह काम करता है।

गितुब में भूत से पोस्ट के अनुसार


1
यह ध्यान देने योग्य है कि इस सिंटैक्स का उपयोग करने से परिणाम के रूप में पिछली पंक्ति को एक फ़ंक्शन (यदि आप एक अर्धविराम के साथ लाइनें समाप्त नहीं कर रहे हैं) के रूप में संक्षिप्त करने की कोशिश के रूप में जावास्क्रिप्ट का उपयोग कर सकते हैं।
bmacnaughton

5

इसे इस्तेमाल करे:

it ('cannot play outside the board', function() {
   expect(scope.play(10)).to.be.undefined; // undefined
   expect(scope.play(10)).to.not.be.undefined; // or not
});

धन्यवाद, लेकिन यही मैं ऊपर दूसरे प्रयास में कर रहा हूं। मुझे यह समझना चाहिए कि इसे सिंटैक्स के साथ कैसे करना चाहिए
thebenedict

1

दस्तावेज़ के अनुसार @ दाविद-मानदंड का उत्तर सही है, मेरे पास सेटअप के साथ कुछ समस्याएँ थीं और इसके बदले में निम्न का विकल्प चुना।

(टाइपऑफ स्कोप.प्ले (10))। should.be.undefined;


typeofऑपरेटर एक स्ट्रिंग लौटाता है ; इसलिए इस दावे को पारित नहीं किया जा सका; cuz'undefined' !== undefined
dNitro

1

haveऔर notखोजशब्दों के संयोजन के बारे में मत भूलना :

const chai = require('chai');
chai.should();
// ...
userData.should.not.have.property('passwordHash');

0

आप should()"अपरिभाषित" के एक प्रकार के लिए अपने फ़ंक्शन परिणाम को लपेट सकते हैं और परीक्षण कर सकते हैं :

it ('cannot play outside the board', function() {
  should(scope.play(10)).be.type('undefined');
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.