【问题标题】:Unit testing, how to check whether the template for $uibModal exists单元测试,如何检查$uibModal的模板是否存在
【发布时间】:2016-10-31 08:00:13
【问题描述】:

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

但是如果模板路径会改变,我需要修改这个测试。

如何检查模态窗口是否接收到现有模板而不进行测试修改?

提前致谢!

【问题讨论】:

  • 您可以检查您是否能够从$templateCache获取模板
  • @AlekseyL.,非常感谢!就是这样。

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


【解决方案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);
    });
});

【讨论】:

  • 谢谢。我应该对模板内容一无所知。它甚至可以是空的。我想确保这个调用选项没有错误并且存在相应的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2021-12-30
相关资源
最近更新 更多