【问题标题】:Jasmine - test the $mdDialogJasmine - 测试 $mdDialog
【发布时间】:2017-02-11 07:55:24
【问题描述】:

我需要在 jasmine 测试中 100% 覆盖这项服务,但它没有让我覆盖控制器。

这是对话的服务:

(function () {
    'use strict';

    angular.module('core.dialog').service('dialog', ToasterService);

    ToasterService.$inject = ['$translate', '$mdDialog'];

    function ToasterService($translate, $mdDialog) {

        this.show = function (key, values) {
            $translate(key, values).then(function (message, $event) {
                $mdDialog.show({
                    controller: DialogController,
                    templateUrl: 'app/common/core/dialog/dialog.html',
                    targetEvent: $event,
                    locals: {
                        message : message
                    }
                });

                function DialogController($scope, $mdDialog, message) {
                    $scope.message = message;
                    $scope.closeDialog = function() {
                        $mdDialog.hide();
                    };
                }

            });
        };

    }

})();

但是当我运行代码覆盖率报告时,它没有覆盖 DialogController 函数。

有人可以帮我解决这个问题吗?提前致谢。

【问题讨论】:

    标签: angularjs karma-jasmine


    【解决方案1】:

    这是一个老问题,但如果有人想知道如何解决这个问题,这里有一种方法,其中一种。我会用角度创建控制器,将其移出服务,因此您只能对控制器进行单元测试。然后 spyOn $mdDialog.hide 并确保它被调用。假设 DialogController(...) 已停止服务,因此可见。

    angular.module('example')
           .controller('DialogController' DialogController);
    

    然后,在设置您的测试存储 $mdDialog 以便稍后进行间谍活动时,如果您对从 hide() 返回的承诺执行任何操作,您还需要 $q 或任何您想要使用的承诺。

    var mdDialog, q;
    beforeEach(inject(function ($injector) {
            mdDialog = $injector.get("$mdDialog");
            q = $injector.get("$q");
    

    然后您创建您的控制器和 $rootScope.$digest(),这将在 elsewhere 中进行深入介绍。 最后在您的测试中:

    spyOn(mdDialog, 'hide').and.callFake(function(){
            var deferred = q.defer();
            deferred.resolve();
            return deferred.promise;
          });
     // TODO: call your closeDialog() controller function here (may need to call $apply)
     expect(mdDialog.hide).toHaveBeenCalled();
    

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多