单元测试,如何检查$ uibModal的模板是否存在

时间:2016-10-31 08:00:14

标签: javascript angularjs unit-testing jasmine angular-ui

我使用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));
});

但如果模板路径发生变化,我将需要修改此测试。

如何在没有测试修改的情况下检查模态窗口是否收到现有模板?

提前致谢!

1 个答案:

答案 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);
    });
});