gpt4 book ai didi

unit-testing - 我可以在没有 TestScheduler 的情况下对 RxJS 函数进行单元测试吗?

转载 作者:行者123 更新时间:2023-12-04 21:37:47 26 4
gpt4 key购买 nike

tl;dr 是否可以在不重写的情况下对这段代码进行单元测试?

http://jsbin.com/jezosegopo/edit?js,console

const keyUpObserver = ($input, fetchResults) => {
const source = Rx.Observable.fromEvent($input, 'keyup')
.map(e => e.target.value)
.filter(text => text.length > 2)
.debounce(300)
.distinctUntilChanged();

return source.flatMapLatest(text => Rx.Observable.fromPromise(fetchResults(text)));
};
keyUpObserver上面的代码很大程度上基于 RxJS自动完成示例,并使用去抖动来防止锤击服务器。

我正在尝试对这个函数进行单元测试,但 Sinon 的 useFakeTimers 似乎不起作用。
const clock = sinon.useFakeTimers();

const $input = $('<input>');
const fetchResults = (text) => new Promise(resolve => resolve(text + ' done!'));

keyUpObserver($input, fetchResults).subscribe(text => console.log(text));

$input.val('some text').trigger('keyup');

clock.tick(500);

// Enough time should have elapsed to make this a new event
$input.val('some more text').trigger('keyup');

我猜这也不是 sinon 相关的,而是 RxJS 使用一些内部时钟,这些时钟必须不受外部假时钟的影响。

鉴于此,无论如何都要对我的 keyUpObserver 代码进行单元测试而不重写它以采用调度程序(生产中的默认值,单元测试中的测试)?

最佳答案

...接近答案:似乎 RxJs 正在使用默认/全局 setTimeout诗农应该能够覆盖的实现。至少这是我在阅读 defiultscheduler's code 时所说的话。如果您不通过(如上所述)自定义调度程序,它将使用它。

不过,我对意图有点困惑。来自 this little fork我希望只有第三个触发器才能真正触发它所做的事情,还是我应该不合时宜? 👀

关于unit-testing - 我可以在没有 TestScheduler 的情况下对 RxJS 函数进行单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896113/

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