Недавно я добавил функцию безопасности в существующее приложение angular. Вот что у меня получилось после:
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
}));