Rxjs大理石测试

时间:2018-02-18 23:03:09

标签: testing rxjs rxjs5 marble

试图了解哪些是对RXjs 5订阅进行单元测试的最佳方式。 例如,如果我在订阅块中有一个复杂的observables链和一些业务逻辑,我应该如何测试它? 我看到的选项是:

  1. 使用带有advanceBy运算符的测试调度程序(类似于在rxjs 4中执行此操作的方式)
  2. 大理石测试,但据我所知,大理石测试仅涵盖了observable,因此您可以根据特定输入测试可观察链的输出,但此测试不包括订阅块...
  3. 任何建议或想法都会非常有用

1 个答案:

答案 0 :(得分:0)

如果您断言从链返回的可观察对象与您的大理石图匹配,那么您还在测试观察者方法是否被正确调用。如果要测试观察者方法,我将独立进行。

使用大理石测试,您可以测试Observable是否已订阅。假设您有以下可观察的来源。

const source =  m.hot("--^-a-b-c-|");

然后您可以测试您的观察对象是否具有正确的订阅:

const expectedSubscription = "^-------!";
m.expect(source).toHaveSubscriptions(subs);

当然,这取决于您使用的版本以及使用的大理石库。 (语法可能不同)。还有一个很好的博客文章,可以使您对整个主题有一个很好的概述。 https://itnext.io/findings-about-rxjs-marble-testing-and-the-testscheduler-b23c6bdf6b49