我经常从同事那里得到这个问题。我终于抽出时间来记录我在博客上测试 RxJ 的方法。由于您的问题似乎与 RxJs5 有关,我只会在这里引用我的帖子的相关部分。
以 RxJs4 方式在 RxJs5 中进行测试
当您将代码库从 RxJs4 迁移到 5 时,您会发现很多内容已被移动、重命名,最重要的是 TestScheduler 的实现不再可用。 RxJs 贡献者 kwonoj 创建了一个兼容性 shim 帮助迁移到 RxJs5。您可以使用 npm 安装它npm install @kwonoj/rxjs-testscheduler-compat
。并未实现 TestScheduler 的所有功能,但最重要的功能.startScheduler
工作中。
const TestScheduler = require('@kwonoj/rxjs-testscheduler-compat').TestScheduler;
const next = require('@kwonoj/rxjs-testscheduler-compat').next;
const complete = require('@kwonoj/rxjs-testscheduler-compat').complete;
it('works in RxJs5 with the compat package', () => {
const scheduler = new TestScheduler(); // Note; no longer the Rx.TestScheduler
const results = scheduler.startScheduler(
() => Rx.Observable.interval(100, scheduler).take(3),
{ created: 100, subscribed: 200, unsubscribed: 1000 } // NOTE: disposed is now renamed to unsubscribed
);
collectionAssert.assertEqual(res.messages, [
next(200 + 100, 0),
next(200 + 200, 1),
next(200 + 300, 2),
complete(200 + 300)
]);
});
使用新的 Marble 测试语法在 RxJs5 中进行测试
RxJs 团队推出了弹珠测试语法更直观地定义您的操作员或自定义代码应如何操作。
var e1 = hot('----a--^--b-------c--|');
var e2 = hot( '---d-^--e---------f-----|');
var expected = '---(be)----c-f-----|';
expectObservable(e1.merge(e2)).toBe(expected);
在撰写本文时,他们尚未使这种方法在 RxJs5 库本身之外真正易于使用。有可用的实现看看自己如何做。您还可以在RxJs5 的代码库了解如何设置测试框架来进行您自己的弹珠测试。有一个开放的关于使用 RxJs5 记录测试的问题。我还没有成功地让我的测试框架设置以这种方式进行弹珠测试。