首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对返回可观测值的函数使用大理石测试

对返回可观测值的函数使用大理石测试
EN

Stack Overflow用户
提问于 2018-03-12 19:42:00
回答 1查看 1.5K关注 0票数 2

我有一个函数,它接受一个数组并返回一个可观察的值(实质上是在每次延迟之后从给定数组中发出每个值):

代码语言:javascript
复制
export const typewriter = <T>(str: T[], delay = 20) =>
  zip(interval(delay), from(str)).pipe(map(([, str]) => str));

我想为此编写单元测试,我正在尝试使用rxjs-弹珠并遵循来自RxJS的书写大理石试验指令。

所有的例子似乎都需要一个可以观察到的热源和一个可以观察到的冷源来比较期望值。在这种情况下,我有一个函数,返回一个冷的,可观察的。我试过这样写:

代码语言:javascript
复制
const expected = m.hot('-^-a-b-(c|)');

const source = typewriter(['a', 'b', 'c']);

m.expect(source).toBeObservable(expected);

然而,我总是得到Expected <blank> to equal ...,即源是空的。我认为这是因为可观察到的源并不热,但是即使我在断言之前做了source.subscribe(),我也会得到相同的错误。使用m.cold进行可观察的测试并不重要。

如何测试使用RxJS弹珠返回可观察到的函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-12 23:45:08

您的typewriter函数使用可观察到的interval创建者,但只传递delay。这意味着它将使用创建者的默认调度程序。

为了与大理石测试一起使用,它需要使用TestScheduler --可以通过m.scheduler获得。

将测试调度程序传递给可观察到的深度嵌套的测试调度程序是一件痛苦的事情。rxjs-marbles包括一个bind方法--参见医生们 --以使这一点变得更容易:

代码语言:javascript
复制
m.bind();
const expected = m.hot('-^-a-b-(c|)');
const source = typewriter(['a', 'b', 'c']);
m.expect(source).toBeObservable(expected);

调用绑定猴子补丁--所有调度程序--将调用转发到测试的TestScheduler

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49243276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档