前言
在使用 RxJS 进行开发时,我们常常需要使用 RxJS 中的一些测试工具,比如 RxJS Testing Utility。但是为了方便 TypeScript 开发者对 RxJS 进行测试,社区推出了一个 @types/rx-lite-testing
包,提供了针对 TypeScript 的类型定义。本文将会介绍如何使用该包,让我们更加方便快捷地进行 RxJS 的测试。
安装
通过 npm 安装 @types/rx-lite-testing
:
npm i -D @types/rx-lite-testing
同时请确保你的项目中已经安装了 RxJS:
npm i -S rxjs
安装完成后,你可以在 TypeScript 项目中导入相应的模块:
import { TestScheduler } from '@types/rx-lite-testing';
使用
相比于 RxJS 中的测试工具,@types/rx-lite-testing
的测试工具更加简洁易用。下面是一些常用的测试操作:
创建测试调度器
除非你自己实现了自己的 Scheduler
,否则你通常需要使用 TestScheduler
创建调度器。
const scheduler = new TestScheduler((a, b) => { expect(a).toEqual(b); // 这里我们使用 expect 进行测试验证,对于 Jest 等测试框架可以直接使用 });
创建测试 Observables
在构建测试用例时,测试通常需要使用 Observable
。你可以使用 TestScheduler.createColdObservable
创建冷可观察对象。
const source = scheduler.createColdObservable('--a--b--c--', { a: 1, b: 2, c: 3 });
这里的 --a--b--c--
表示在每个时间点上返回可观察对象发出的值,属性中的 { a: 1, b: 2, c: 3 }
是该 Observable 发出值的映射。这样,我们就创建了一个发出三个值的 cold Observable。
进行测试
可以使用 scheduler.expectObservable
对你刚刚创建的 Observable 进行测试。比如,我们可以使用以下代码来验证这个 Observable 是否发出了正确的值:
scheduler.expectObservable(source).toBe('--a--b--c--', { a: 1, b: 2, c: 3 });
这意味着:在时间点 -
,我们不会得到任何值;在时间点 a
,我们得到了值 1
;在时间点 b
,我们得到了值 2
;在时间点 c
,我们得到了值 3
。
启动测试调度器
TestScheduler
是一个虚拟的时间表,所以我们需要手动调用 scheduler.flush()
来启动测试调度器,才能进行测试。
scheduler.flush();
示例代码
下面是一个基本的测试用例示例,该用例测试一个在 100 毫秒后发出了一个值 1
的 Observable:
-- -------------------- ---- ------- ------ - ------------- - ---- ------------------------- ------ - ----- - ---- ------- ------ - ----- - ---- ----------------- ----------------- -- -- - ---------- ------ -- ---------- ---- ----- - ----- ----- - --------- ------- -- -- - ----- --------- - --- ----------------- -- -- - --------------------- --- ----- ------ - ---------- ---------------- --------- -- ---------------------------------------------- ------ - -- - --- ------------------ --- ---
在这个示例中,我们首先创建了一个测试调度器 scheduler
。然后创建了一个在100毫秒之后发射值1
的Observable
,并对其进行测试。代码结束时需要执行flush()
方法,以等待这个操作完成并返回可观测值。
结论
使用 @types/rx-lite-testing
与 TypeScript 一起使用 RxJS 的测试工具将会更加方便,它为 RxJS 提供了强类型的支持,让我们更加轻松快捷地进行 RxJS 的测试,使用场景非常广泛。通过本文的教程,你将能够轻松上手该工具,并在你的项目中应用这些技巧,进行更加高效的前端开发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedc1d0b5cbfe1ea0611f2b