2015-06-23 10 views
5

Sto costruendo un'app AngularJS (utilizzando ES6) che è il più possibile AngularJS 2.0, quindi non avrò molto lavoro con la migrazione.AngularJS 2.0 - Come testare l'applicazione?

Come sapete non ci sarà controllori come li conosciamo in < = v1.4

codice Esempio di una delle mie direttive

class LoginSidebar { 

    constructor() { 

    } 

    someMethod(){ 
    } 
} 

LoginSidebar.$inject = []; 

export default function() { 
    return { 
     scope: {}, 
     templateUrl: 'tpl/path/to/loginSidebar.tpl.html', 
     replace: true, 
     controller: LoginSidebar, 
     controllerAs: 'loginSidebarCtrl' 
    }; 
}; 

Questo è ciò che i miei app.js sembra

import loginSidebar from "./js/component/loginSidebar/LoginSidebar.js"; 

angular.module('myModule', [ 
    'ngNewRouter', 
    'ngAnimate' 
]) 

    .directive("loginSidebar", loginSidebar); 

come potete vedere non ho .controller() in là, così come faccio a testare i metodi all'interno della classe?

PS. Ho provato con Karma-Jasmine, ma devo testare l'intera direttiva e se lo faccio, ottengo l'errore ho scritto qui: AngularJS & Karma-Jasmine - How to ignore templateUrl to avoid "Unexpected request: GET .../.html"

risposta

0

È possibile definire controller con nome globale, e quindi fare riferimento alla direttiva :

//LoginSidebarController.js 
class LoginSidebarController { 
    // controller code here 
} 

export default LoginSidebarController 

//LoginSidebarDirective.js 
export default function() { 
    return { 
     scope: {}, 
     templateUrl: 'tpl/path/to/loginSidebar.tpl.html', 
     replace: true, 
     controller: 'LoginSidebarController', 
     controllerAs: 'loginSidebarCtrl' 
    }; 
}; 

//app.js 
import loginSidebarDirective from "./js/component/loginSidebar/LoginSidebarDirective.js"; 
import LoginSidebarController from "./js/component/loginSidebar/LoginSidebarController.js"; 

angular.module('myModule', []) 
    .directive('loginSidebar', loginSidebarDirective) 
    .controller('LoginSidebarController', LoginSidebarController) 

Quindi è possibile richiedere il controller come altro controller normale per verificarlo indipendentemente dalla direttiva.

Come secondo modo è possibile accedere al controller tramite il metodo angular.element().controller('loginSidebar'). Qualcosa del genere:

var testElm = angular.element('<login-sidebar />'); 
$compile(testElm); 
testElm.controller('loginSidebar')