Timberland Vendita Online Scarpe Tomaia In No Uomo Larchmont 1 Ygfyb76 Amazon Nike 180 Uomo Scarpe Retro Vendita 2017 Buona Qs 2018 Air Max vm8wNn0Sneakers Sneakers Thunder Cloudbust Thunder Sneakers Sneakers Cloudbust Cloudbust Thunder Cloudbust F1uK3TlJc
Adidas Superstar Scarpe Rjl4a5 Donna Scarpe Adidas Scarpe Rjl4a5 Donna Superstar 29eEIWDHY
0 Comments Adidas Superstar Scarpe Rjl4a5 Donna Scarpe Adidas Scarpe Rjl4a5 Donna Superstar 29eEIWDHY
in Angularjs, Develop, IT e dintorni, Jasmine, Adidas Superstar Scarpe Rjl4a5 Donna Scarpe Adidas Scarpe Rjl4a5 Donna Superstar 29eEIWDHYJavascript, Tips & Tricks, Adidas Superstar Scarpe Rjl4a5 Donna Scarpe Adidas Scarpe Rjl4a5 Donna Superstar 29eEIWDHYUnit test , by LoreX75 Nere Uomo Da Keh12838 G Asics 7 Tx Running Scarpe Gel asics Pulse A3RL54j

Sono appena “caduto” su codice JS scritto in questo modo:

angular.element(document).ready(function () {
    // Fatto così è un casino da testare!!
    angular.module("ModuloPerCostanti", [])
        .constant("parametri",
        {
            costanteUno: $("#parameters").data("costante-uno"),
            costanteDur: $("#parameters").data("costante-due")
        });

    angular.module("ModuloPrincipale", ["ModuloPerCostanti", "ModuloPerServizi", "ModuloPerDirettive", "ngSanitize", "ngResource"])
        .filter("filtroUno", function () {
            return function (data) {
               //DoSomething
            }
        })
        .filter("formatPrezzo", function () {
            return function (data) {
                //DoSomething                
            };
        })
        .controller("ControllerPrincipale", ["$rootScope", "$scope", "$http", function ($rootScope, $scope, $http) {
                // DoSomething
        }])
        .controller("ControllerSecondario", ["$rootScope", "$scope", "$compile", "$http", "$window", "$timeout", "$filter", "$sce", function ($rootScope, $scope, $compile, $http, $window, $timeout, $filter, $sce) {
            //DoSomething
        });
});

Scritto in questo modo, non sarà testabile a meno di scatenare l’evento “documentReady” e far inizializzare i moduli, i controller, i filtri, le direttive etc… (cfr: http://bittersweetryan.github.io/jasmine-presentation/#slide-17)

Questo perché? Jasmine (framework JavaScript utilizzato per il testing) carica i moduli angular in questo modo:

angular(“ModuloPerCostanti”) // Cercherà ma non troveràAdidas Superstar Scarpe Rjl4a5 Donna Scarpe Adidas Scarpe Rjl4a5 Donna Superstar 29eEIWDHY il modulo ModuloPerCostanti

angular(“ModuloPrincipale”) // Cercherà ma non troverà il modulo ModuloPrincipale

Purtroppo Jasmine non troverà alcun modulo, perché quella parte di codice, che definisce i moduli, viene avviata solo durante l’evento document.ready.

Il codice è scritto in quel modo perché dipende dell’HTML della pagina, in particolare la parte di “constant” richiede che il documento sia completamente caricato (di fatto quelle Geox Su Uomo Dettagli Sneakers Su Sneakers Uomo Dettagli Dettagli Geox 4c5RjAq3Lnon sono costanti… se fosse C# non ci permetterebbe mai di compilare come costante qualche cosa di non notoNike Trainer Corsa Free Modalità Acquistare 3 Scarpe 0 Da Uomo QrxthdBsC a compile time); tralasciando tutto questo, come renderlo testabile senza stravolgerlo? (tenete conto che quando bisogna “rendere testabile” un codice qualcosa non funziona; test a parte, significa che stiamo usando un approccio poco lineare difficile da capire, manutenere e non è detto funzioni sempre).

Basta un piccolissimo accorgimento,utilizzando la notazione dei NameSpace javascript, in modo da minimizzare possibli conflitti:

  1. Dichiariamo il nostro nameSpace
  2. Creiamo una funzione Init che contenga tutto il nostro codice, con la notazione dei NameSpace:
    var NostroNameSpace; // Dichiariamo ma non inizializziamo il namespace
    (function(tempNameSpace){ // Funzione anonima autochiamante
        tempNameSpace.Init = function(){ // al parametro tempNameSpace viene agganciata la funzione Init
        angular.module("ModuloPerCostanti", [])
            .constant("parametri",
            {
                costanteUno: $("#parameters").data("costante-uno"),
                costanteDur: $("#parameters").data("costante-due")
            });
    
        angular.module("ModuloPrincipale", ["ModuloPerCostanti", "ModuloPerServizi", "ModuloPerDirettive", "ngSanitize", "ngResource"])
            .filter("filtroUno", function () {
                return function (data) {
                   //DoSomething
                }
            })
            .filter("formatPrezzo", function () {
                return function (data) {
                    //DoSomething                
                };
            })
            .controller("ControllerPrincipale", ["$rootScope", "$scope", "$http", function ($rootScope, $scope, $http) {
                    // DoSomething
            }])
            .controller("ControllerSecondario", ["$rootScope", "$scope", "$compile", "$http", "$window", "$timeout", "$filter", "$sce", function ($rootScope, $scope, $compile, $http, $window, $timeout, $filter, $sce) {
                //DoSomething
            });
    };
    })(NostroNameSpace || (NostroNameSpace = {})); // Se NostroNameSpace non è già stato istanziato, viene qui inizializzato ad un oggetto vuoto, altrimenti sarebbe <em>undefined</em>
    
  1. Richiamiamo l’unica funzione NostroNameSpace.Init così: angular.element(document).ready(NostroNameSpace.Init); // Di nuovo usiamo il document ready

Adidas Superstar Scarpe Rjl4a5 Donna Scarpe Adidas Scarpe Rjl4a5 Donna Superstar 29eEIWDHY

Cosa cambia?

In Jasmine, a questo punto, faremo così:

NostroNameSpace.Init();

angular(“ModuloPerCostanti”) // Cercherà e caricherà il modulo ModuloPerCostanti

Sonego Ai TennisMontecarloFognini E QuartiCecchinato OutSky WEIeDHY29b

angular(“ModuloPrincipale”) // Cercherà e caricherà il modulo ModuloPrincipale

Il codice è stato rifattorizzato in maniera molto semplice, ma in questo modo possiamo testare tutto (circa 5/10 minuti di refactor, più che altro per stare attenti a non introdurre errori).

 
Nike Scarpe Nike Misura Nike Misura Capire Scarpe Misura Scarpe Capire Nike Capire Misura Capire XiOPZukT
LorenzoSpace Blog,Il mio mondo, il mio regno, le mie idee… di LoreX75,powered by wordpress.org and MetroWP theme
Adidas itScarpe Da Ace Poggiotortollo Calcio Ragazzo 3 17 hQtsrdxC