2013-03-10 4 views
46

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

var example = {'foo':'bar', 'bar':'baz'} 

var result = extendingPipeline(example) 
// {'foo':'bar', 'bar':'baz', 'extension': Function} 

expect(result).toEqual(example) //fails miserably 

मैं, एक मिलान कि इस मामले में पास होता है करने के लिए की तर्ज पर करना चाहते हैं:

expect(result).toInclude(example) 

मुझे पता है कि मैं एक कस्टम मिलान लिख सकते हैं, लेकिन यह है कि मुझे लगता है यह एक आम समस्या है कि समाधान पहले से ही बाहर होना चाहिए। मुझे इसकी तलाश कहां करनी चाहिए?

उत्तर

84

जैस्मीन 2,0

expect(result).toEqual(jasmine.objectContaining(example)) 

यह सुधार के बाद से: https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0 तो यह और भी नेस्टेड वस्तुओं पर काम करता है, तो आप सिर्फ प्रत्येक वस्तु आप jasmine.objectContaining()

में आंशिक रूप से मिलान करना चाहते रैप करने के लिए की जरूरत है

सरल उदाहरण:

it('can match nested partial objects', function() 
{ 
    var joc = jasmine.objectContaining; 
    expect({ 
     a: {x: 1, y: 2}, 
     b: 'hi' 
    }).toEqual(joc({ 
     a: joc({ x: 1}) 
    })); 
}); 
+7

मैं इसे प्यार करता है जब इतना जवाब के लिए एक बेहतर वास्तविकता दर्शाने के लिए बदल :) – iwein

+0

क्या किसी ऑब्जेक्ट के लिए अलग-अलग मान और समान कुंजी वाली एक ही चीज़ करने का कोई तरीका है? – Siva

+3

@ शिवा - हो सकता है कि आप अपनी ऑब्जेक्ट्स के बजाय 'ऑब्जेक्ट.कीज (ओबीजे)' के परिणामों की तुलना करने की कोशिश कर सकें? –

1

मुझे नहीं लगता कि यह सामान्य है और मुझे नहीं लगता कि आप एक पा सकते हैं। बस एक लिखें:

beforeEach(function() { 
    this.addMatchers({ 
     toInclude: function (expected) { 
      var failed; 

      for (var i in expected) { 
       if (expected.hasOwnProperty(i) && !this.actual.hasOwnProperty(i)) { 
        failed = [i, expected[i]]; 
        break; 
       } 
      } 

      if (undefined !== failed) { 
       this.message = function() { 
        return 'Failed asserting that array includes element "' 
         + failed[0] + ' => ' + failed[1] + '"'; 
       }; 
       return false; 
      } 

      return true; 
     } 
    }); 
}); 
+0

मैं एक ही बात किया है, लेकिन यह वास्तव में वहाँ अभी तक नहीं है ... – iwein

5

मुझे एक ही समस्या है। मैं तो बस इस कोड की कोशिश की, यह मेरे लिए काम करता है:

expect(Object.keys(myObject)).toContain('myKey'); 
+3

यह प्रश्न को काफी हल नहीं करता है क्योंकि मान मेल नहीं खाते हैं तो यह सही होगा। – KnownColor

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