Ответ 1
Я думаю, что вы должны высмеивать getElementById
, чтобы вернуть фиктивный HTMLElement
JASMINE V1.3 ИЛИ НИЖЕ
var dummyElement = document.createElement('div');
document.getElementById = jasmine.createSpy('HTML Element').andReturn(dummyElement);
JASMINE V2. 0+
var dummyElement = document.createElement('div');
document.getElementById = jasmine.createSpy('HTML Element').and.returnValue(dummyElement);
Итак, теперь для каждого вызова document.getElementById
он возвращает фиктивный элемент. Он установит фиктивный элемент innerHTML и в конце сравнит его с ожидаемым результатом.
ОБНОВЛЕНИЕ: И я думаю, вы должны заменить toBe
на toEqual
. toBe
может потерпеть неудачу, потому что он проверит идентичность объекта вместо равенства значений.
ОБНОВЛЕНИЕ 2 (относительно нескольких ID): я не уверен, но вы могли бы вместо этого назвать подделку. Он создаст новый элемент HTML для каждого идентификатора (если он еще не существует) и сохранит его в литерале объекта для будущего использования (то есть других вызовов getElementById
с тем же идентификатором)
JASMINE V1.3 ИЛИ НИЖЕ
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];
});
JASMINE V2. 0+
var HTMLElements = {};
document.getElementById = jasmine.createSpy('HTML Element').and.callFake(function(ID) {
if(!HTMLElements[ID]) {
var newElement = document.createElement('div');
HTMLElements[ID] = newElement;
}
return HTMLElements[ID];
});