2013-03-10 12 views
46

Test altındaki davranışlarım boyunca genişletilebilecek bir nesnem var, ancak özgün özelliklerin hala orada olduğundan emin olmak istiyorum.Özelliklerinin alt kümelerindeki nesneleri karşılaştırmak için bir yasemin eşleyicisi var mı

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

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

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

Ben çizgisinde bu durumda geçerdi bir eşleyici olsun isterim: Ben özel bir eşleyici yazabilirsiniz biliyoruz

expect(result).toInclude(example) 

ama geliyor bana Bu, böyle bir çözümün zaten orada olması gereken yaygın bir sorundur. Nereye bakmalıyım?

cevap

84

Jasmine 2,0

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

Bu düzeltmenin beri: hatta iç içe nesneler üzerinde çalışır https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0 , sadece her sen jasmine.objectContaining()

kısmen eşleştirmek istediğiniz nesneyi kaydırmak gerekiyor

Basit örnek:

+7

... henüz gerçekten orada değil :) – iwein

+0

Farklı değerler ve benzer anahtarlar içeren bir nesne için aynı şeyi yapmanın bir yolu var mı? – Siva

+3

@Siva - Nesnelerinizin yerine doğrudan "Object.keys (obj)" kelimesinin sonuçlarını karşılaştırmayı deneyebilirsiniz? –

1

Bence bu ortak bir şey değil ve bir tane bulabileceğini sanmıyorum. Sadece bir tane yazın:

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

Ben de aynı şeyi yaptık, ama o kadar cevaplar daha iyi bir gerçekliği yansıtacak şekilde değişir zaman hoşuma gidiyor – iwein

5

Aynı problem yaşadım. Sadece bu kod çalıştı, benim için çalışıyor:

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

Bu, değerlerle uyuşmadığı takdirde doğru olarak döneceğinden, soruyu tam olarak ele almaz. – KnownColor

İlgili konular