Это интересно, мне еще не приходилось сталкиваться с такой ситуацией. Но обычно я снова использую служебную функцию под названием waitUntil
.
import { interval } from 'rxjs';
.....
export const waitUntil = async (untilTruthy: Function): Promise<boolean> => {
while (!untilTruthy()) {
await interval(25).pipe(take(1)).toPromise();
}
return Promise.resolve(true);
};
. Вы можете установить время на ваше усмотрение, я просто установил его по умолчанию на 25 мс.
it('should upload files and add links to array', async (done) => {
const files = new TestFileList() as any as FileList;
component.uploadFiles(files);
await waitUntil(() => component.photoUrls.length === files.length);
// you may not have to do the following assertion because we waited for it to be true
expect(component.photoUrls.length).toEqual(files.length);
done();
});
Таким образом, мы не зависим от времени (setTimeOut of 5s
), но мы просто продолжаем цикл до тех пор, пока условие не станет истинным, а затем продолжаем наши утверждения. Я думаю, что это читается лучше.