fakeAsync не работает с debounceTime - PullRequest
2 голосов
/ 07 октября 2019

Я пытаюсь написать модульный тест для функции в Angular приложении с debounceTime (rxjs). И используйте fakeAsync для асинхронного тестирования. И похоже, что в тесте debounceTime разрешается немедленно, даже если я не установил tick() или установил его с небольшим интервалом, например tick(500).

Например, с delay(1000) вместо debounceTime(1000)fakeAsync отлично работает.

тест :

describe('rr', () => {
    it('should get Date diff correctly in fakeAsync with rxjs scheduler', fakeAsync(() => {
        let result = null;
        of ('hello').pipe(debounceTime(1000)).subscribe(v => { result = v; });
        expect(result).toBeNull(); // But it is 'Hello' - debounceTime resolves immediately
        tick(1000);
        expect(result).toBe('hello');
...
  }));
})

stackblitz : https://stackblitz.com/edit/angular-ohhi9e?file=src%2Fapp%2Fapp.component.spec.ts

1 Ответ

2 голосов
/ 07 октября 2019

Оператор of завершает работу сразу после уведомления. Если никаких дополнительных уведомлений не ожидается, debounceTime не нужно ждать и, таким образом, уведомляет о моменте отправки полного уведомления.

Чтобы достичь своего результата, попробуйте использовать долгоживущие наблюдаемые, такие как Subject.

describe('rr', () => {
    it('should get Date diff correctly in fakeAsync with rxjs scheduler', fakeAsync(() => {
        let result = null;
        new BehaviourSubject ('hello').pipe(debounceTime(1000)).subscribe(v => { result = v; });
        expect(result).toBeNull();
        tick(1000);
        expect(result).toBe('hello');
...
  }));
})

Источник: debounceTime на GitHub

_complete () {this.debounceNext ();...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...