我的工厂下面是私人功能的依赖。私有函数在$ 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];
});
我知道我们无法测试私有功能。我只是想知道在这种情况下如何处理测试用例。我们可以模拟一个私人函数
答案 0 :(得分:0)
您无法在工厂中模拟私人功能。
它们的范围是包含empConfigFactory的函数,它们在任何其他地方都是不可见的。如果你想测试它们,那么你必须以某种方式暴露它们。
简而言之,对它们进行单元测试的唯一方法是创建另一个服务或工厂,将这些方法暴露给您当前的工厂。
您可以在此处查看罗伯特的答案:How to test 'private' functions in an angular service with Karma and Jasmine