2014-02-06 11 views
0

Почему один и тот же тестовый пример, когда выполняется второй раз, терпит неудачу?Почему jasmine-jquery событие шпионов непоследовательно?

Настройка

var element, elementClickSpy; 
beforeEach(function() { 
    element = angular.element('<div id="some-element"></div>'); 
    $('body').append(element); 
    elementClickSpy = spyOnEvent('#some-element', 'click'); 
}); 

Случай 1

В первом случае работает как ожидалось.

it('should work', function() { 
    expect(elementClickSpy).not.toHaveBeenTriggered(); 
    element.click(); 
    expect(elementClickSpy).toHaveBeenTriggered(); 
}); 

Случай 2 (Идентичный случай 1)

Второе утверждение не по какой-то причине, даже если дело является точной копией первого случая.

it('should work again', function() { 
    expect(elementClickSpy).not.toHaveBeenTriggered(); 
    element.click(); 
    expect(elementClickSpy).toHaveBeenTriggered(); 
}); 
+0

Во втором случае, не выполняется ли первое или второе утверждение? (Мне интересно, не попадает ли неправильный элемент в ваш 'beforeEach', например, тело не очищается после каждого теста) –

+0

Ошибка только второго утверждения. Странно, да? Поэтому, если тело не очистится, я ожидаю, что первое ожидание потерпит неудачу. –

+0

Возможно. Что находится в '...' вашего вызова 'spyOnEvent'? –

ответ

1

Подводя итог, что мы нашли в приведенных выше комментариях, кажется, как будто DOM не получает очищен между тестами. Поскольку вы используете ID #some-element для привязки к обработчику кликов, второй тест шпионит за первым элементом, но вы нажимаете на новый.

Вы можете:

  1. Spy на точно элемента вы обеспокоены: spyOnEvent(element, 'click') или
  2. Почистите DOM между тестами (по .remove() ИНГ кнопку или очистка HTML тела)
+0

Спасибо. На самом деле, кажется, что карма или жасмин или что-то не сбрасывают дом после каждого теста. Я добавил код в beforeEach, чтобы сделать это вручную. –