Я использую 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);
}