Каков наилучший способ проверки обработки событий в объектах?Я не могу понять это.
У меня есть объект, который устанавливает несколько прослушивателей событий, и когда он наблюдает, как эти события запускаются, он изменяет объект dom на странице.Когда у меня есть несколько тестов, последний из приведенных ниже примеров завершается неудачно, если я закомментирую другие, все нормально.
У меня есть набор тестов, который выглядит как
var TitleTest = TestCase('TitleTest');
TitleTest.prototype.defaultTitle = 'title';
TitleTest.prototype.defaultCount = '0';
TitleTest.prototype.setUp = function() {
var titleObj;
this.div = new Element('div');
$$('body').first().insert(this.div);
this.div.insert('<div id="title"><h1><span id="titleCaption">' + this.defaultTitle + '</span><span id="titleCount">' + this.defaultCount + '</span></h1></div>');
titleObj = new Title();
});
TitleTest.prototype.testNewItemsEvent = function() {
var data = {count: 10};
assertEquals('Count should be zero before events are fired', this.defaultCount, $('titleCount').innerHTML);
document.fire('custom:NewItems', data);
assertEquals('New count should be 10', data.count + '', $('titleCount').innerHTML);
});
// ... a few other simple tests like the one above
TitleTest.prototype.testUpdateSpecial = function() {
var data = {caption: 'Special Title', count: 10},
specialObj = {special: {type: 2, value: 5}};
// Emulate a special type of category, that can only be
// added at page load
document.fire('custom:UpdateTitle', data);
assertEquals(data.caption, $('titleCaption').innerHTML);
assertEquals(data.count, $('titleCount').innerHTML);
//Removing the special category should revert the title to its default
document.fire('custom:RemoveSpecial', specialObj);
assertEquals(this.defaultTitle, $('titleCaption').innerHTML);
assertEquals(this.defaultCount, $('titleCount').innerHTML);
// only way to get this added back in during non load is using
// javascript history so it needs to revert to previous state
document.fire('custom:AddSpecial', specialObj);
assertEquals(data.caption, $('titleCaption').innerHTML);
assertEquals(data.count + '', $('titleCount').innerHTML);
});
Последняя параиз утверждений всегда будет неудачным, если предыдущие тесты будут выполнены, но пройдет, если я закомментирую другие тесты.Я в растерянности, что я могу сделать, чтобы заставить это работать.
Редактировать: вот код, который обрабатывает добавление / удаление специальных заголовков
Event.observe(document, 'custom:UpdateTitle', function(event) {
if (event.memo.caption) {
this._updateCaption(event.memo.caption);
}
if (event.memo.count) {
this._updateCount(event.memo.count);
}
}.bind(this));
Event.observe(document, 'custom:RemoveSpecial', function(event) {
if (
event.memo.special.type === 1 ||
event.memo.special.type === 2 ||
(
event.memo.special.type === 3 &&
parseInt(event.memo.special.value, 10) === 8
)
){
this._previousTitle = $('titleCaption').innerHTML;
this._resetTitle();
}
}.bind(this));
Event.observe(document, 'custom:AddSpecial', function(event) {
if (
event.memo.special.type === 1 ||
event.memo.special.type === 2 ||
(
event.memo.special.type === 3 &&
parseInt(event.memo.special.value, 10) === 8
)
){
if (!this._previousTitle.blank()) {
this._updateCaption(this._previousTitle);
}
}
}.bind(this));