我使用service $ uibModal来创建模态窗口。我需要确保模板文件存在。
(function () {
angular.module('some.module.name').factory('serviceName', function ($uibModal) {
function open() {
return $uibModal.open({
templateUrl: 'path/to/template.html',
controller: 'ControllerName',
resolve: {
context: function () {
return something;
}
}
});
}
return {
open: open
};
});
})();
我可以像这样检查静态路径:
it('should pass a config object when opens the modal window', function () {
expectedOptions = {
templateUrl: 'path/to/template.html',
controller: 'ControllerName',
resolve: {
context: jasmine.any(Function)
}
};
serviceName.open();
expect($uibModal.open).toHaveBeenCalledWith(jasmine.objectContaining(expectedOptions));
});
但如果模板路径发生变化,我将需要修改此测试。
如何在没有测试修改的情况下检查模态窗口是否收到现有模板?
提前致谢!
答案 0 :(得分:1)
我认为您的测试应检查模板中的内容是否已加载到模态窗口中,而不是检查模板文件是否存在。要做到这一点,你必须使用ngMock与Jasmine。 您可以在source code of AngularUI Bootstrap内找到类似测试的工作示例 下面是我的解决方案(这不是真正的代码,只是示例):
describe('Modal window', function() {
var $rootScope,
$uibModal,
$compile,
modal;
beforeEach(module('ui.bootstrap.modal'));
beforeEach(inject(function(_$rootScope_, _$compile_, _$uibModal_) {
$rootScope = _$rootScope_;
$compile = _$compile_;
$uibModal = _$uibModal_;
var modalOptions = {
templateUrl: 'path/to/template.html',
controller: 'ControllerName',
resolve: {
context: jasmine.any(Function)
}
};
var modal = $uibModal.open(modalOptions);
$rootScope.$digest();
}));
it('should load "Hello World" from template', function {
var contentToCompare = actual.find('body > div.modal > div.modal-dialog > div.modal-content');
var result = contentToCompare.html().indexOf('Hello World');
expect(result).toBeGreaterThan(0);
});
});