Angular fakeAsync不适用于debounceTime

Angular fakeAsync不适用于debounceTime,angular,rxjs,jasmine,debounce,Angular,Rxjs,Jasmine,Debounce,我正在尝试使用debounceTime(rxjs)为Angular应用程序中的函数编写单元测试。并使用fakeAsync进行异步测试。 在测试中,即使我没有设置tick()或设置像tick(500)这样的小间隔,去BounceTime看起来也会立即得到解决 例如,使用delay(1000)代替debounceTime(1000)fakeAsync可以正常工作 测试: describe('rr', () => { it('should get Date diff correctly

我正在尝试使用
debounceTime
rxjs
)为
Angular
应用程序中的函数编写单元测试。并使用
fakeAsync
进行异步测试。 在测试中,即使我没有设置
tick()
或设置像
tick(500)
这样的小间隔,去BounceTime看起来也会立即得到解决

例如,使用
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

操作员的
在收到通知后立即完成。如果不需要其他通知,
debounceTime
不需要等待,因此会在发出完整通知时发出通知

为了达到你的效果,试着使用一个长寿命的观察对象,比如
主题

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');
...
  }));
})
资料来源:

_完成(){ this.debouncedNext(); ... }