我们如何为嵌套函数编写单元测试用例(Jasmine)?

时间:2017-01-13 16:48:51

标签: angularjs unit-testing jasmine karma-jasmine karma-coverage

正在为以下场景编写测试用例。代码覆盖率未完全覆盖。我不知道是否可以写作。如果我提出任何错误的意思,请指导我为这个场景编写一个测试用例并避免将来出现这个问题。至少告诉它可能与否

(function() {
    'use strict';

    angular
        .module('myApp')
        .component("testLockCtrl", {
            templateUrl: 'wwwroot/html/myLocation/testLock.html',
            controller: 'testLockCtrl as vm'
        })
        .controller("testLockCtrl", testLockCtrl);

    testLockCtrl.$inject = ['SessionService', 'HttpRequestSoapAPI'];
    /*Parent Controller*/
    function testLockCtrl($rootScope, $mdDialog) {

         vm.ChangeDataController=ChangeDataController;
        /*childer controller*/
        function ChangeDataController($scope) {
            $scope.tempData = true;
           /*following functions (child of change data controller) can  called in click*/
            $scope.editData = function() {

                $scope.tempData = false;
            }


            $scope.editDatas = function() {

                /*some code*/
            }

        }

        function addData() {
            TC$DialogMgr.tag(function(tagID) {
                $mdDialog.show({
                    locals: { testCase: vm },
                    controller: ChangeDataController,
                    parent: angular.element(document.body),
                    templateUrl: "wwwroot/html/myLocation/addData.html",
                    clickOutsideToClose: true,
                    preserveScope: true,
                    controllerAs: 'vm'
                }).then(function() {

                }, function() {

                }).finally(function() {
                    TC$DialogMgr.unTag(tagID);
                });
            }, TC$DialogMgr.type.Input);
        }
    }

})();

it("Should check if Module Flag status is received", function () {
        var data = [{ loc: 'mde', Status: -1 }];
        testLockCtrl.ChangeDataController(data);
        var testData=testLockCtrl.editDatas ()
        expect(testData).toBeDefined();

    })

上面是我的测试用例,它可以覆盖子控制器而不是它的嵌套函数。我们可以从controller.js文件中访问测试用例中的作用域变量。而且代码覆盖率仅涵盖ChangeDataController函数,而不仅仅涵盖其内部函数。请帮我写一个测试用例并明确我的疑问。

1 个答案:

答案 0 :(得分:0)

答案是你应该公开那些内部函数或间接测试它们。无论何处调用@方法,您都可以确保已经测试了该函数并将不同的参数传递给调用函数。

或者,如果您将addData添加到addData,则可以更轻松地进行测试:

$scope

在你的测试中:

$scope.addData = function() { /* ... */ };