首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jasmine -测试$mdDialog

Jasmine -测试$mdDialog
EN

Stack Overflow用户
提问于 2015-10-13 14:06:21
回答 1查看 1.8K关注 0票数 1

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

下面是对话框的服务:

代码语言:javascript
复制
(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函数。

有人能帮我一下吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-02-11 07:39:15

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

代码语言:javascript
复制
angular.module('example')
       .controller('DialogController' DialogController);

然后,在稍后设置用于监视的测试商店$mdDialog时,如果您正在使用从hide()返回的promise执行任何操作,则还需要$q或您想要使用的任何promise。

代码语言:javascript
复制
var mdDialog, q;
beforeEach(inject(function ($injector) {
        mdDialog = $injector.get("$mdDialog");
        q = $injector.get("$q");

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

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33095263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档