Soru belge öğesi için sahte nesne


Bir sonraki test kodum var:

it("Test", function() {
    loadResources();

    expect(document.getElementById('MyElement').innerHTML).toBe("my string");
});

Fonksiyon gövdesi loadResources ():

document.getElementById('MyElement').innerHTML = "my string";

Testim şu mesajla başarısız oluyor:

TypeError: "null'ın" innerHTML "özelliğini ayarlanamaz.

İnnerHTML için sahte nesne oluşturmam gerekiyor gibi görünüyor. Nasıl yapabilirim?


25
2018-05-06 12:54


Menşei




Cevaplar:


Bence alay etmelisin getElementById kukla bir HTMLElement döndürmek için

var dummyElement = document.createElement('div');
document.getElementById = jasmine.createSpy('HTML Element').andReturn(dummyElement);

Şimdi, her çağrı için document.getElementById kukla elemanı iade eder. Kukla öğenin içHTML'sini ayarlayacak ve sonunda beklenen sonuçla karşılaştıracaktır.

DÜZENLEME: Ve sanırım yerini almalısın toBe ile toEqual. toBe Değer eşitliği yerine nesne kimliğini test edeceği için başarısız olabilir.

EDIT2 (çoklu kimlik ile ilgili): Emin değilim, ama bunun yerine sahte diyebilirsiniz. Her bir kimlik için yeni bir HTML öğesi oluşturacaktır (eğer henüz mevcut değilse) ve onu gelecekteki kullanım için bir nesne değişmezinde saklayacaktır (örn. getElementById aynı kimliğe sahip)

var HTMLElements = {};
document.getElementById = jasmine.createSpy('HTML Element').andCallFake(function(ID) {
   if(!HTMLElements[ID]) {
      var newElement = document.createElement('div');
      HTMLElements[ID] = newElement;
   }
   return HTMLElements[ID];
});

53
2018-05-06 13:25



Ya ben 2 kimliğim varsa? document.getElementById ('MyElement1'). innerHTML = "dizgim"; document.getElementById ('MyElement2'). innerHTML = "dizgim"; Ve bu kimliği kontrol etmeliyim? - Ted
son düzenlememe bak - devnull69
Harika bir cevap için teşekkür ederim. Bana çok yardımcı oldu. - Outlier
Bu cevabın jasmine 1.3 sözdizimini kullandığını unutmayın. yasemin 2.0 (ve sonrası) farklıdır. Örneğin: jasmine.createSpy ('HTML Element') ve.returnValue (dummyElement); - fstang
@ devnull69 Örneklerinden 'HTML Elementi' öğesinin normalde document.getElementById öğesine geçecek kimliği olması gerektiğini açıklayabilir misiniz? - redeagle47