2016-05-17 13 views
-1

Ich habe unterhalb der Fabrik, wo es eine Abhängigkeit von der privaten Funktion gibt. Die private Funktion ist in $ http.get (url) .successKomponententest private Funktion in angularjs Fabrik innerhalb dann Funktion

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]; 
}); 

Ich bin mir bewusst, dass wir die private Funktion nicht testen können. Ich möchte nur wissen, wie man in diesem Szenario mit den Testfällen umgeht. Können wir eine private Funktion spotten

+0

Meine Meinung: Sie können es nicht direkt testen. Sie sollten das gesamte Modul testen, da Sie den Code einfach von der inneren Funktion an die Stelle verschieben können, an der er verwendet wird. Aber einen Moment ... [es gibt schon Fragen zu diesem Thema - hast du schon gesucht? (Http://stackoverflow.com/search?q= [Jasmine] + Test + private + Funktion) vorher? –

Antwort

0

Sie können private Funktion in einer Fabrik nicht vortäuschen.

Ihr Bereich ist die Funktion, die Ihre empConfigFactory umfasst und sie sind woanders unsichtbar. Wenn du sie testen willst, musst du sie irgendwie entlarven.

Kurz gesagt, die einzige Möglichkeit, Unit-Tests durchzuführen, besteht darin, einen anderen Service oder eine andere Factory zu erstellen, die diese Methoden Ihrer aktuellen Factory aussetzt.

Sie können einen Blick auf Robert haben hier beantworten: How to test 'private' functions in an angular service with Karma and Jasmine