TestBed FakeAsync - асинхронный обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL - PullRequest
0 голосов
/ 10 сентября 2018

Я использую Jasmin, Karma и Angular TestBed для модульных тестов в Angular. Я получаю ошибку

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Я использую методы fakeAsync и tick. После поиска я добавил параметр тайм-аута для моих тестов и даже дал 2000 миллисекунд для тика.

it('Should setup the initial data', fakeAsync(() => {

      fixture.detectChanges();
      tick(2000);

      expect(getUsersSpy).toHaveBeenCalledTimes(1);     

    }), 10000);


 it('Should ensure form is dirty when user changed', fakeAsync(() => {
      fixture.detectChanges();
      tick(2000);

      fixture.whenStable().then(() => {
        userComponentInstance.ngOnInit();        
        userComponentInstance.onUserChanged();
        fixture.detectChanges();        
        expect(userComponentInstance.userForm.form.dirty).toBeTruthy();
      });

 }), 10000);

Не повезло с кодом выше. В соответствии с jasmine: асинхронный обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL Я пытался, но у меня это не работает. Я не выбрал первое решение, так как я работаю с fakeAsync и не сделал

var originalTimeout;

beforeEach(function() {
    originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});

afterEach(function() {
  jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});

У меня есть строка ниже в одном из его дочерних компонентов. Дочерний компонент, созданный в цикле

ngAfterViewInit() {
    setTimeout(() => {
        jQuery("#" + this.name).selectpicker();
    },0);        
}
...