Я работаю с набором тестов Jasmine, который включает в себя как «ванильные» тесты Жасмина, так и тесты Жасмина для некоторых компонентов Angular 2. Из-за включения Angular 2 загружается zone.js. Это создает конфликт с часами Жасмина. Например, следующий тест завершается с ошибкой, Error: Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?
Конфликт между zone.js и часами Жасмина
describe('an async test with zone.js present', function() {
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
it('cannot install jasmine\'s mock clock', function() {
var callback = jasmine.createSpy('setTimeoutCallback')
setTimeout(callback, 55);
jasmine.clock().tick(56);
expect(callback).toHaveBeenCalled();
});
})
Here является plunker для приведенного выше кода.
Не доставляя испытания на Угловые 2 отдельно от тестов «ванили», мне интересно, какие варианты могут быть доступны. Например, можно ли выполнить работу часов Jasmine с зоной? Например, можно ли имитировать тик в зоне или сбросить все запланированные задачи до утверждения?
Это также, кажется, исправляет проблему для меня, но я не уверен, что это может вызвать, потому что теперь функции ZoneJS больше не вызываются. –
Выполняете ли вы 'деинсталляцию', а затем' install' или только удаление? – Tim
обе, сначала удалите и затем установите. AFAIK для деинсталляции сбросит все функции часов, установленные в настоящее время на реальные часы, тогда установка всегда будет работать, потому что проверка, которая вызывает исключение в первую очередь, теперь всегда будет проходить из-за удаления. Он работает для меня сейчас, но это может вызвать проблемы, если я запустил тест, для которого требуется ZoneJS. –