gpt4 book ai didi

angular - fakeAsync 不适用于 debounceTime

转载 作者:行者123 更新时间:2023-12-04 11:31:02 29 4
gpt4 key购买 nike

我正在尝试为 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

最佳答案

of运算符(operator)在收到通知后立即完成。如果不需要额外的通知,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 on GitHub

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

关于angular - fakeAsync 不适用于 debounceTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58273011/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com