我目前正在編寫一項服務來控制上傳流程。我正在爲顯示和隱藏上傳模式框的功能編寫單元測試。在測試中,我使用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);
});
});
第一描述塊經過細,但第二個失敗。它告訴我它Expected 1 to equal 0.
如果我在cancel
的測試中對angular.element.find
進行了第一次預期評論,它表示'期望2等於1'。
所有我能確定的是,html都被扔進相同的空間,並在每次測試後複合。有什麼方法可以防止這種行爲,或者使用'afterEach'語句來刷新以前的HTML?
謝謝!
Ammendment
這裏是這個套件的測試的完整的代碼,如果它可以幫助:
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);
});
});
});
謝謝!絕對是一個好方法。我沒有想過對模式服務本身進行窺探,但這非常合理。我會切換到這種方法。 出於好奇,你有什麼想法,爲什麼我得到我的結果?測試之間有沒有清除的東西? – Octothorpe 2014-12-11 17:44:40
@Octothorpe,你的第一個觀察是正確的:「我所能確定的是,html都被扔進了同一個空間,並且在每次測試之後複合。」你可以通過在afterEach中搜索一個'.modal'來解決這個問題,並且刪除它,但是你不必通過窺探'$ modal.open'來解決這個問題。還要注意''modal'保留了打開的模態的內部寄存器,所以簡單地將它們從DOM中移除並不是真正的清理工作。 – user2943490 2014-12-11 22:41:02
好酷,很高興知道。我仍然有很多東西需要了解很多這方面的情況。感謝您的確認! – Octothorpe 2014-12-12 16:58:27