Способ тестирования асинхронного компонента

У меня есть угловой компонент, и я хочу проверить состояние после вызова асинхронного метода. Как я могу это сделать? Мой метод doSomething не возвращает обещания!

angular.module('myModule').component('myComponent', {
  template: '<p></p>',
  controller: function($q) {
    this.state = 1;
    this.doSomething: function() {
      var that = this;
      setTimeout(function() { that.state = 2; }, 50);
    }
  }
});

Тест

describe('Test', function() {
    var ctrl = null;

    beforeEach(module('myModule'));
    beforeEach(inject(function(_$componentController_) {
       ctrl = _$componentController_('myComponent', null, {});
    }));

    it('should be 2', function() {
      ctrl.doSomething();
      expect(ctrl.state).toBe(2);
    });
});

1 ответ

  1. Вам нужно будет ждать обновления в тесте, что-то вроде этого:

    describe('Test', function() {
        var ctrl = null;
    
        beforeEach(module('myModule'));
        beforeEach(inject(function(_$componentController_) {
           ctrl = _$componentController_('myComponent', null, {});
        }));
    
        it('should be 2', function(done) {
          ctrl.doSomething();
          setTimeout(function() { 
             expect(ctrl.state).toBe(2);
             done(); 
          }, 52);
        });
    });
    

    надеюсь это поможет.