2013-03-30 5 views
166

वहाँ jasmine.js में एक तरह से उदाहरण के लिए अगर दो सरणियों बराबर हैं जाँच करने के लिए, है:Jasmine.js की तुलना सरणियों

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

न तो काम करने के लिए लगता है।

उत्तर

262

बस परीक्षण किया है और यह 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() versus toEqual(): toEqual() checks equivalence. toBe(), on the other hand, makes sure that they're the exact same object.

+0

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

+1

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

+0

@ मॉर्फीस - मैंने 'toBeCloseTo (अपेक्षित, 2) 'की कोशिश की है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। – cod3monk3y

-1

मैं एक था simil एआर मुद्दा जहां एक सरणी संशोधित किया गया था। मैं इसे $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); 
    } 
    }); 
}); 

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

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' तत्वों की जांच करता है। आप इसे जांच कर ठीक कर सकते हैं 'अगर (x.length! == y.length) {वापसी झूठी; } 'पहले से। – warchinal

+1

@AndyTheEntity "addMatchers फ़ंक्शन अब spec (यह) पर नहीं है, यह अब वैश्विक जैस्मीन ऑब्जेक्ट पर है।" - देखें [जैस्मीन डॉक्स] (http://jasmine.github.io/2.0/upgrading.html) – rwisch45

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