2015-06-23 4 views
5

Я создаю приложение AngularJS (с использованием ES6), которое максимально равномерно AngularJS 2.0, поэтому у меня не будет большой работы с миграцией.AngularJS 2.0 - Как протестировать приложение?

Как вы знаете, что не будет контроллеров, как мы знаем их в < = v1.4

Пример кода одного из моих директив

class LoginSidebar { 

    constructor() { 

    } 

    someMethod(){ 
    } 
} 

LoginSidebar.$inject = []; 

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

Это то, что мои app.js выглядит

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

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

    .directive("loginSidebar", loginSidebar); 

как вы можете видеть, что я не имею в там нет .controller(), так как я должен проверить методы внутри класса?

PS. Я попытался с помощью карма-жасмин, но я должен проверить всю директиву, и если я делаю это, я получаю ошибку я писал здесь: AngularJS & Karma-Jasmine - How to ignore templateUrl to avoid "Unexpected request: GET .../.html"

ответ

0

Вы можете определить контроллер с мировым именем, а затем ссылаться на него в директиве :

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

Тогда вы можете потребовать от контроллера, как и другого обычного контроллера, протестировать его независимо от директивы.

Как второй способ, вы можете получить доступ к контроллеру с помощью метода angular.element().controller('loginSidebar'). Что-то вроде этого:

var testElm = angular.element('<login-sidebar />'); 
$compile(testElm); 
testElm.controller('loginSidebar') 
Смежные вопросы