Angular Karma Unit Test: Как да инжектирате макетна услуга в конфигурацията на karma вместо във всички тестови спецификации

Наскоро добавих функция за сигурност към съществуващо ъглово приложение. Ето какво получих след това:

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
  }));

person chfw    schedule 30.03.2015    source източник


Отговори (1)


Можете да извлечете подиграната услуга в отделен js файл като обект, да включите този файл в списъка с файлове karma.conf, след което да използвате този обект като глобален във вашите спецификации.

person pansay    schedule 23.08.2015