Наскоро добавих функция за сигурност към съществуващо ъглово приложение. Ето какво получих след това:
Chrome 3X.0.2125 (Linux) ERROR
Some of your tests did a full page reload!
Chrome 3X.0.2125 (Linux): Executed 23 of 102 (skipped 2) ERROR
Ето как съм настроил защитната функция:
angular.module('myapp', [/*..I have omitted..*/])
.run(function(MyLoginSerivce, /*.. I have omitted ..*/)){
if(!MyLoginService.isLoggedIn()){
MyLoginService.redirectForLogin();
}else{
/* other logics */
}
}
Знаех, че трябва да добавя следния код към всяка тестова спецификация. Но звучи глупаво да го добавите към десетки тестови файлове.
beforeEach(module(function($provide){
$provide.value("MyLoginServce", {
isLoggedIn: function(){
return true;
},
redirectForLogin: function {}
});
}));
Има ли начин да кажете на Karma, че използвате макетна услуга и да добавите това парче код само веднъж и на едно място?
Благодаря
Актуално решение
Стъпка 1: Запазих това в отделен файл, напр. ./test/mocked.login.service.js:
var mockedLoginService = {
isLoggedIn: function(){
return true;
},
redirectForLogin: function {}
});
Стъпка 2: Включвам файла в karma.conf.js, като вмъквам „test/mocked.login.service.js“
Стъпка 3: Просто го използвам в моите тестове като следното:
beforeEach(module(function($provide){
$provide.value("MyLoginServce", mockedLoginService
}));