2015-06-23 19 views
5

Buduję aplikację AngularJS (przy użyciu ES6), która jest tak duża jak to tylko możliwe AngularJS 2.0, więc nie będę miał dużo pracy z migracją.AngularJS 2.0 - Jak przetestować aplikację?

Jak wiadomo nie będzie kontrolery, jakie znamy w < = v1.4

przykładu kodu jednego z moich dyrektyw

class LoginSidebar { 

    constructor() { 

    } 

    someMethod(){ 
    } 
} 

LoginSidebar.$inject = []; 

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

to, co moi app.js wygląda

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

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

    .directive("loginSidebar", loginSidebar); 

jak widać nie mam .controller() tam, więc jak mam do testowania metod wewnątrz klasy?

PS. Próbowałem używać Karma-Jasmine, ale muszę przetestować całą dyrektywę, a jeśli to zrobię, otrzymuję błąd, który tutaj napisałem: AngularJS & Karma-Jasmine - How to ignore templateUrl to avoid "Unexpected request: GET .../.html"

Odpowiedz

0

Można zdefiniować kontroler o globalnej nazwie, a następnie odwołać go do dyrektywy :

//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) 

Następnie można wymagać sterownika jako zwykłego kontrolera, aby przetestować go niezależnie od dyrektywy.

Jako drugi sposób można uzyskać dostęp do sterownika za pomocą metody angular.element().controller('loginSidebar'). Coś takiego:

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