মোছার সাথে জাভাস্ক্রিপ্ট পরীক্ষায় assert.equal এবং assert.DPEqual এর মধ্যে পার্থক্য?


94

আমি আমার এক্সপ্রেস.জেএস অ্যাপ্লিকেশনটিতে একটি ছোট মডিউল পরীক্ষা করতে মোচা ব্যবহার করছি। এই মডিউলটিতে, আমার একটি ফাংশন একটি অ্যারে প্রদান করে। আমি প্রদত্ত ইনপুটটির জন্য অ্যারেটি সঠিক কিনা তা পরীক্ষা করতে চাই। আমি এইভাবে করছি:

suite('getWords', function(){
    test("getWords should return list of numbers", function() {
        var result = ['555', '867', '5309'];
        assert.equal(result, getWords('555-867-5309'));
    });
});

এটি যখন চলতে থাকে, আমি নীচের আসক্তি ত্রুটি পেয়েছি:

AssertionError: ["555","867","5309"] == ["555","867","5309"]

যাইহোক, আমি যখন আমার পরীক্ষাটি একটিতে পরিবর্তন করি assert.deepEqual, পরীক্ষাটি ভাল হয়ে যায়। আমি ভাবছিলাম যে এটি কোনও ==বনামের ঘটনা ===, তবে আমি যদি প্রবেশ করি

[1,2,3] === [1,2,3]

নোড.জেএস কমান্ড লাইনে, আমি এখনও মিথ্যা পেয়েছি।

অ্যারেগুলি অন্য মানগুলি যেমন (যেমন 1 == 1) তুলনা করে না ? এবং assert.equal এবং assert.DPEqual এর মধ্যে পার্থক্য কী?

উত্তর:


161

অ্যারে অন্যান্য মানগুলি যেভাবে তুলনা করে না (যেমন 1 == 1)

নম্বর, স্ট্রিং, বুলিয়ান nullএবং undefinedমানগুলি হয় এবং আপনার প্রত্যাশা অনুযায়ী তুলনা করা হয়। 1 == 1, 'a' == 'a'ইত্যাদি। মানগুলির ক্ষেত্রে ===এবং এর ==মধ্যে পার্থক্য হ'ল ==প্রথমে ধরণের রূপান্তর সম্পাদন করার চেষ্টা করবে, এ কারণেই '1' == 1কিন্তু তা নয় '1' === 1

অন্যদিকে অ্যারেগুলি বস্তু। ===এবং ==এই ক্ষেত্রে অপারেন্ডগুলি শব্দার্থগতভাবে সমান বলে বোঝায় না, তবে তারা একই বস্তুকে বোঝায়

assert.equal এবং assert.DPEqual এর মধ্যে পার্থক্য কী?

assert.equalউপরে বর্ণিত হিসাবে আচরণ করে। এটি উত্স!= হতে পারে যেমন যুক্তিগুলি হ'ল এটি ব্যর্থ । সুতরাং এটি আপনার সংখ্যার স্ট্রিংয়ের অ্যারেগুলির জন্য ব্যর্থ হয় কারণ তারা মূলত সমতুল্য হলেও তারা একই বস্তু নয়।

ডিপ (ওরফে স্ট্রাকচারাল) সাম্যতা, অপরদিকে, অপারেন্ডগুলি একই বস্তু কিনা তা পরীক্ষা করে না, বরং তারা সমতুল্য। এক অর্থে, আপনি বলতে পারেন যে এটি বস্তুর মান হিসাবে এটি তুলনা করতে বাধ্য করে।

var a = [1,2,3]  
var b = a              // As a and b both refer to the same object
a == b                 // this is true
a === b                // and this is also true

a = [1,2,3]            // here a and b have equivalent contents, but do not
b = [1,2,3]            // refer to the same Array object.
a == b                 // Thus this is false.

assert.deepEqual(a, b) // However this passes, as while a and b are not the 
                       // same object, they are still arrays containing 1, 2, 3

assert.deepEqual(1, 1) // Also passes when given equal values

var X = function() {}
a = new X
b = new X
a == b                 // false, not the same object
assert.deepEqual(a, b) // pass, both are unadorned X objects
b.foo = 'bar'
assert.deepEqual(a, b) // fail!

4
এর দুর্দান্ত ব্যাখ্যা deepEqual(); আপনি বাস্তবে এটি না আসা পর্যন্ত আপনি তুলনা করার বিষয়ে কিছু ভাবেন না।
ব্র্যান্ডস্ক্রিপ্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.