В настоящее время я пишу службу для управления потоком загрузки. Сейчас я пишу модульные тесты для функции, которая показывает и скрывает модальное окно загрузки. В тестах я использую angular.element.find
, чтобы проверить, существует ли модальное окно. Во втором тесте число увеличивается по сравнению с тем, что я ожидал, как будто оно не сбрасывается.
Два теста заключаются в следующем:
describe('show', function() {
it('should initially not show the modal', function() {
expect(upload.isShowing()).toEqual(false);
expect(angular.element.find('.modal').length).toEqual(0);
});
it('should show the upload modal', function() {
expect(upload.isShowing()).toEqual(false);
expect(angular.element.find('.modal').length).toEqual(0);
upload.show();
$rootScope.$digest();
expect(upload.isShowing()).toEqual(true);
expect(angular.element.find('.modal').length).toEqual(1);
});
});
describe('cancel', function() {
it('should hide the upload form', function() {
expect(upload.isShowing()).toEqual(false);
expect(angular.element.find('.modal').length).toEqual(0);
upload.show();
$rootScope.$digest();
expect(upload.isShowing()).toEqual(true);
expect(angular.element.find('.modal').length).toEqual(1);
});
});
Первый блок description проходит нормально, а вот второй терпит неудачу. Он говорит мне, что это Expected 1 to equal 0.
Если я закомментирую первое ожидание с помощью angular.element.find
в тесте для cancel
, он скажет: «Ожидается, что 2 будет равно 1».
Все, что я могу определить, это то, что весь HTML-код помещается в одно и то же пространство и усугубляется после каждого теста. Есть ли способ предотвратить такое поведение или использовать оператор afterEach для сброса предыдущего HTML?
Спасибо!
Поправка
Вот полный код для этого набора тестов, если это поможет:
describe('uploadService', function() {
var $rootScope,
upload;
beforeEach(module('upload'));
beforeEach(module('upload.service'));
beforeEach(module('bublNg.templates'));
beforeEach(module('ui.bootstrap.tpls'));
beforeEach(inject(function($injector) {
upload = $injector.get('upload');
$rootScope = $injector.get('$rootScope');
}));
describe('isShowing', function() {
it('should return true if the modal us showing', function() {
expect(upload.isShowing()).toEqual(false);
upload.show();
expect(upload.isShowing()).toEqual(true);
});
});
describe('show', function() {
it('should initially not show the modal', function() {
expect(upload.isShowing()).toEqual(false);
expect(angular.element.find('.modal').length).toEqual(0);
});
it('should show the upload modal', function() {
expect(upload.isShowing()).toEqual(false);
expect(angular.element.find('.modal').length).toEqual(0);
upload.show();
$rootScope.$digest();
expect(upload.isShowing()).toEqual(true);
expect(angular.element.find('.modal').length).toEqual(1);
});
});
describe('cancel', function() {
it('should hide the upload form', function() {
expect(upload.isShowing()).toEqual(false);
// expect(angular.element.find('.modal').length).toEqual(0);
upload.show();
$rootScope.$digest();
expect(upload.isShowing()).toEqual(true);
// expect(angular.element.find('.modal').length).toEqual(1);
upload.cancel();
expect(upload.isShowing()).toEqual(false);
});
});
});