2010-05-10 6 views
3

J'essaie actuellement de créer une suite de tests pour mes applications javascript. Mon problème est que, il semble que je ne peux pas avoir accès à init() de mes utils objet, comme vous pouvez le voir ci-dessous:Comment accéder aux 'fonctions privées' d'un singleton à partir d'un autre objet

J'ai mon application qui suivent un modèle singleton:

var appModal = function() { 
    var utils = Object.create(moduleUtils); 
    function init(caller, options) { 
    } 
}(); 

Ma suite de tests est dans moduleUtils, ceci est un littéral d'objet converti en prototype

moduleUtils.debug = { 
    addSlideTest : function(){ 
     /* this function cannot fire init() from appModal */ 
}} 
+0

Voir http://stackoverflow.com/questions/716207/testing-private-functions-in-javascript et http://stackoverflow.com/questions/1881078/testing-javascript-functions-inside-anonymous-functions –

Répondre

1

Ceci n'est pas possible.
Vous devez exposer les fonctions fermées dans un objet visible publiquement. Par exemple, vous pouvez créer un objet testMethods dans vos tests unitaires pour collecter des méthodes privées. Par exemple, vous pouvez créer un objet testMethods. Votre fichier principal serait alors ajouter des méthodes privées à l'objet si elle existe, comme ceci:

//In appModal 
if (typeof testMethods === "object") 
    testMethods.init = init; 

//In test suite 
testMethods = { }; 
... 
testMethods.init(); 
+0

ce n'est pas parfait, mais c'est beaucoup mieux que de ne pas les tester –

Questions connexes