单元测试angularjs工厂里面的私函数然后函数

时间:2016-05-17 22:01:26

标签: angularjs jasmine karma-jasmine

我的工厂下面是私人功能的依赖。私有函数在$ http.get(url).success

define(['underscore'], function (_) {
    "use strict";
    function empConfigFactory($http, $q, $log, configManager, empConfig) {
        var empSal = null;


//how do i test the below method.
        function calculateEmpSal() {
            var deferred = $q.defer();
            emp = empConfig;
            if (emp.designation === "Director") {
                empSal.Salary = "soem value";
            }
            else if (emp.designation === "CoDirector") {
                empSal.Salary = "soem value";
            }
            deferred.resolve(empSal);
            return deferred.promise;
        }

        return {
            "get": function () {
                var url = "http://someUrl";
                var deferred = $q.defer();

                $http.get(url).success(function (data) {
                        empSal = data;
                        if ("someCondition") {
                        //dependency on below function
                            calculateEmpSal().then(function () {
                                deferred.resolve(empSal);
                            }, function () {
                                deferred.resolve(empSal);
                            });
                        } else {
                            deferred.resolve(brand);
                        }
                    })
                    .error(function (err) {
                        console.log(err);
                    });
                return deferred.promise;
            }
        };
    }

    return ['$http', '$q', '$log', 'empModule.config.configManager', 'empModule.remote.empConfig', empConfigFactory];
});

我知道我们无法测试私有功能。我只是想知道在这种情况下如何处理测试用例。我们可以模拟一个私人函数

1 个答案:

答案 0 :(得分:0)

您无法在工厂中模拟私人功能。

它们的范围是包含empConfigFactory的函数,它们在任何其他地方都是不可见的。如果你想测试它们,那么你必须以某种方式暴露它们。

简而言之,对它们进行单元测试的唯一方法是创建另一个服务或工厂,将这些方法暴露给您当前的工厂。

您可以在此处查看罗伯特的答案:How to test 'private' functions in an angular service with Karma and Jasmine