जैस्मीन। जे एस सरणियों की तुलना


205

क्या चमेली में एक तरीका है। यह जांचने के लिए कि दो सरणियाँ समान हैं, उदाहरण के लिए:

arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])

न ही काम लगता है।

जवाबों:


341

बस परीक्षण किया और इसके साथ काम करता है toEqual

कृपया मेरी परीक्षा लें:

http://jsfiddle.net/7q9N7/3/

describe('toEqual', function() {
    it('passes if arrays are equal', function() {
        var arr = [1, 2, 3];
        expect(arr).toEqual([1, 2, 3]);
    });
});

सिर्फ जानकारी के लिए:

toBe () बनाम toququal (): toEqual () तुल्यता की जांच करता है। दूसरी ओर, toBe (), सुनिश्चित करता है कि वे ठीक उसी वस्तु हैं।


एचएम, धन्यवाद, ऐसा लगता है कि समस्या यह है कि जिस सरणी की मैं तुलना कर रहा हूं वह संशोधित है, इसलिए यह गिरफ्तारी = [1, 2, 3] को गिरफ्तार करता है जैसे कि ['पॉप'] = फ़ंक्शन () {...} उम्मीद (गिरफ्तार) .toEquals ([1, 2, 3])
user2032804

2
यदि एप्सिलॉन के भीतर मान समान हैं तो परीक्षण कैसे करें? उदाहरण के लिए, मेरा परीक्षण विफल [-9, -6, 6, 3, 1.0000000000000004, 2] के बराबर [-9, -6, 6, 3, 1, 2] में विफल रहता है।
मॉर्फियस

@ मैंफोरियस - मैंने कोशिश की है toBeCloseTo(expected,2)लेकिन यह काम नहीं करता है।
223 बजे cod3monk3y

ofBeCloseTo का दूसरा तर्क दशमलव स्थानों का # है जो इसकी तुलना करेगा।
मॉर्फियस

1
यह डिफ़ॉल्ट रूप से जावास्क्रिप्ट में "==" पर वापस आता है। यह सिर्फ सुरक्षित नहीं है क्योंकि न केवल वास्तविक मूल्यों की तुलना की जाती है, बल्कि संपूर्ण वस्तु।
पीटर

0

आप नीचे दिए गए उल्लेख की तरह एक सरणी की तुलना कर सकते हैं यदि सरणी में कुछ मान हैं

it('should check if the array are equal', function() {
        var mockArr = [1, 2, 3];
        expect(mockArr ).toEqual([1, 2, 3]);
 });

लेकिन अगर किसी फ़ंक्शन से लौटाए गए सरणी में 1 से अधिक तत्व हैं और सभी शून्य हैं तो उपयोग करके सत्यापित करें

expect(mockArray[0]).toBe(0);

-3

सिर्फ रिकॉर्ड के लिए आप हमेशा JSON.stringify का उपयोग करके तुलना कर सकते हैं

const arr = [1,2,3]; expect(JSON.stringify(arr)).toBe(JSON.stringify([1,2,3])); expect(JSON.stringify(arr)).toEqual(JSON.stringify([1,2,3]));

यह स्वाद के सभी मीटर है, यह जटिल शाब्दिक वस्तुओं के लिए भी काम करेगा


हमें उसके बाद toBe और toququal के बीच अंतर की आवश्यकता क्यों होगी?
लुका बोर्रिएन

कोई अंतर नहीं है, मैं सिर्फ यह चाहता हूं कि इसे प्रश्न की तरह देखा जाए
ओहद सदन

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

-4

मेरे पास एक समान मुद्दा था जहां सरणियों में से एक को संशोधित किया गया था। मैं इसके लिए उपयोग कर रहा था $httpBackend, और उसमें से दी गई वस्तु वास्तव में एक $promiseऑब्जेक्ट थी जिसमें एरे ( Arrayऑब्जेक्ट नहीं ) था।

आप एक toBeArrayफंक्शन बनाकर ऐरे से मिलान करने के लिए चमेली का माचिस बना सकते हैं :

beforeEach(function() {
  'use strict';
  this.addMatchers({
    toBeArray: function(array) {
      this.message = function() {
        return "Expected " + angular.mock.dump(this.actual) + " to be array " + angular.mock.dump(array) + ".";
      };
      var arraysAreSame = function(x, y) {
         var arraysAreSame = true;
         for(var i; i < x.length; i++)
            if(x[i] !== y[i])
               arraysAreSame = false;
         return arraysAreSame;
      };
      return arraysAreSame(this.actual, array);
    }
  });
});

और फिर इसे अन्य चमेली मिलान की तरह अपने परीक्षणों में उपयोग करें:

it('should compare arrays properly', function() {
  var array1, array2;
  /* . . . */
  expect(array1[0]).toBe(array2[0]);
  expect(array1).toBeArray(array2);
});

2
मुझे TypeError मिल रही है: this.addMatchers कोई फ़ंक्शन नहीं है
AndyTheEntity

4
आपके द्वारा प्रदान किया गया "arraysAreSame" फ़ंक्शन सरणियों के लिए एक झूठी सकारात्मक देगा x=[1,2], y=[1,2,3]क्योंकि यह केवल पहले x.lengthतत्वों की जांच करता है । आप if (x.length !== y.length) { return false; }पहले से जांच कर इसे ठीक कर सकते हैं ।
वार

1
@AndyTheEntity "AddMatchers फ़ंक्शन अब कल्पना पर नहीं है (यह) अब यह वैश्विक चमेली वस्तु पर है।" - देखें जैस्मीन डॉक्स
rwisch45

for (var i; ...)=> x[undefined], var arraysAreSame = function ... var arraysAreSame = true:(
एंड्रे वेरलैंग

@warchinal अजीब, यह भी पकड़ने में विफल expect([1]).toBeArray([2])। और वास्तव में किसी भी अन्य सरणी, क्योंकिundefined + 1 => NaN
एन्द्र वेर्लांग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.