2015-06-09 2 views
4

Я пытаюсь выполнить проверку моего углового пользовательского сервиса, написанного на машинописном машинописном машинописи. Служба считывает глобальную переменную, определенную в объекте Window. Я обещал, так что в будущем я могу позвонить AJAX, чтобы получить эту информацию. Вот мой урезанная сервис: -

export class ProxyDetectiveService { 
    public static $inject = [ 
     $window, 
     $q 
    ]; 

    constructor(private $window:ng.IWindowService, 
       private $q:ng.IQService) { 
    } 

    public getProxyUserObject =():ng.IPromise<any> => { 
     this.log.debug('Proxy User Service called, to get proxy user details'); 

     var deferred = this.$q.defer(); 
     var proxyDetails = this.$window.portalObject; 
     deferred.resolve(proxyDetails); 

     return deferred.promise; 
    }; 

} 

Мой блок Контрольный пример: -

describe('Proxy Detective Service - Unit Test Cases',() => { 
    var proxyDetectiveService:any, 
     $window:ng.IWindowService; 

    beforeEach(() => { 
     module('myApp'); 
    }); 

    beforeEach(inject(($injector:ng.auto.IInjectorService, _$window_) => { 
     proxyDetectiveService = $injector.get('ProxyDetectiveService'); 
     _$window_ = { 
      portalObject: { 
       proxyUserDetails: { 
        firstName: 'testFN', 
        lastName: 'testLN' 
       } 
      } 
     }; 
    })); 

    it('should have proxy object defined', function() { 
     var promise = proxyDetectiveService.getProxyUserObject(); 
     promise.then(function (response) { 
      expect(response).toBeDefined(); 
     }).catch(function (response) { 
      expect(response).toBeUndefined(); 
     }); 
    }); 
}); 

Вот мои вопросы: -

  1. Мой Тестовый пример запускается на выполнение, но я не см. обманутый объект окна в службе?

  2. Мое обещание или предложение catch никогда не исполняются?

  3. Есть ли какие-либо лучшие способы реализации моего сервиса? Я намерен вернуть обещание, в будущем я могу использовать вызов AJAX.

ответ

5

Вы должны использовать $provide обеспечить высмеивал значение в модульном тесте:

beforeEach(() => { 
    module('myApp', ($provide) => { 
     $provide.value('$window', myMockedWindowObject) 
    }); 
}); 

Вы также должны вызвать $rootScope.$apply() двигаться вперед обещания в модульных тестов.

Смежные вопросы