问题标签 [rxjs-marbles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
635 浏览

testing - RxJs 弹珠测试重试时

我有一个 SocketService。此类负责与服务器的套接字连接和消息传递。我编写了一些代码,使我的客户端能够在连接丢失时重新连接。它应该进行 3 次尝试,它们之间有 5 秒的延迟,如果没有成功则重定向到登录页面。

在那之后,我编写了一个测试,但我无法让它接近发生的事情。

我正在尝试模拟 2 个错误send和一个成功的消息。什么会导致 3 次重新连接尝试和最后一次成功连接。

这是我的测试https://stackblitz.com/edit/jasmine-marbles-testing-jdvcnm?file=src/test.spec.ts

我希望大理石图接近-# 5s # 5s (a|)(在测试中还有另一个图,因为我尝试了不同的图)。

0 投票
0 回答
345 浏览

angular - 如何在 Angular 中使用带有 graphQL Apollo 测试控制器的 rxjs 弹珠测试

我想在 Angular 中测试一个 GraphQL 订阅

  1. 进行查询
  2. 使用附加到查询的订阅subscribeToMore
  3. 通过对其操作使用 flush 来模拟查询结果并验证结果
  4. 通过对其操作使用刷新来模拟订阅结果并验证结果

通过遵循有关客户端测试的 Apollo 文档,我成功地进行了良好的测试:

但是正如您所看到的,该subscribe部分结果的验证对于变量来说并不是很干净firstQueryTick......想象一下如果我想测试 10 个结果......

所以我尝试使用rxjs 大理石测试来替换这部分:

多次尝试后,我无法使其正常工作,因为“同时”expectObservable正在执行subscribe+ validation,我需要:

  • FIRST 订阅查询
  • 然后获取操作后端对象以刷新数据
  • 然后验证结果

是否可以在subscribevalidation使用 rxjs 测试弹珠之间进行操作?

0 投票
1 回答
502 浏览

javascript - RxJS 弹珠测试对象的功能

我从 Observable 返回一个对象。它的属性之一是函数。
在分配甚至空函数并发出对象后,toBeObservable由于非深度匹配,期望失败。

rxjs-marbles/jest用于测试。这是示例测试用例:

结果如下:

我唯一需要检查的是是否action在 object. 可能吗?

0 投票
1 回答
161 浏览

javascript - 为什么 rxjs 6 marbles 文档说“--(abc)-|” 在第 8 帧完成?

我正在阅读 Rxjs 6 的弹珠测试文档,并在“大理石语法”的“示例”部分下找到了这部分

https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/testing/marble-testing.md#examples

这是我的问题的示例:

'--(abc)-|':在第 2 帧发出 a、b 和 c,然后在第 8 帧完成

为什么说第 8 帧是完整的?

对于上面的字符串,我总共只计算了 5 帧。该字符串(abc)应仅计为单个帧。然后是另一帧-,然后是完整的|.

所以我不明白为什么它是第 8 帧,但是当我在使用弹珠的单元测试中运行上述内容时,它输出它在第 8 帧完成。

那么这 3 个额外的帧是从哪里来的呢?

0 投票
3 回答
576 浏览

typescript - 发出值后 RxJS BehaviorSubject getValue 不一致(在 Jest 中测试时)

我不明白为什么.getValue()返回 Observable 的默认值而不是发出的最后一个值。在测试 Observable 时,它​​会正确返回发出的值。

澄清一下,该getValue()方法在测试之外运行良好,它仅在使用 Jest 测试时失败。

谢谢!

0 投票
1 回答
325 浏览

rxjs - RxJS 测试:大理石测试混淆案例

我正在向我的 angular/rxjs 项目添加单元测试,并且我正在使用该marble test解决方案。而且由于我使用的是较新版本的 rxjs,所以我使用了内置的“TestScheduler”模块。

我正在关注这篇文章:https ://brianflove.com/2018/06/28/ngrx-testing-effects/ ,它举了一个例子如下:

单元测试如下:

我可以理解这里的逻辑(大理石字符串)期望一个令人困惑的点:

为什么不--b|呢?由于响应 observable|cold('-a|', { a: user });.

顺便说一句,在这篇文章中,它将使用第三方库,但我使用的是原生库,TestScheduler并且结果相同。

0 投票
1 回答
331 浏览

rxjs - 如何为 redux-observalbe Epic 中使用的这个自定义 RxJS 运算符编写弹珠测试

我需要为我在这部loadEpic史诗中使用的自定义运算符编写大理石测试 - 这有助于我避免INITIALiZE有时动作被调度到较晚并且我得到的问题LOAD_FAILURE

这就是我编写waitFor运行良好的运算符的方式:

你能帮我用rxjs-marbles/jest或任何类似的方法编写这个测试吗?非常感谢!

0 投票
1 回答
816 浏览

angular - Jasmine 使用弹珠测试多个可观察值

因此,我试图根据 observable 是否发出某些值来测试 HTML。我有服务的初始设置以使 observable 发出正确的值,但是当我去创建另一个测试以测试如果我传递错误数据会发生什么时,我无法更改 observable 发出的值。我觉得我错过了一些小东西,有人可以看看,让我知道我做错了什么吗?

这是规格文件

所以基本上在文件的顶部,我有三个版本的值,当可观察对象发出时我需要测试它们,我只能测试第一个。should display an alert if the alert$测试通过就好了,但它是最后一个失败的测试should hide the title...,因为当我这样做时它似乎并没有改变可观察的alertService.alert$ = cold('a', { a: testAlertNoTitle });

0 投票
1 回答
2633 浏览

angular - Angular Unit Test:如何使用大理石测试(rxjs/testing)来测试这个状态管理服务

在我的 Angular 项目中,我有一个服务,用于状态管理以在组件之间共享一些数据,如下所示:

状态管理基于 subject 和 observable,这是 rxjs 世界中的典型用法。

对于此服务的单元测试,我想使用rxjs/testing模块支持的大理石测试功能。解决方案如下:

但是第二个单元测试失败并出现错误:Error: Expected $.length = 0 to equal 1.所以这意味着nameStateService.filteredNames$,这个 observable 在它的流中没有值。

这里有什么问题?

0 投票
1 回答
744 浏览

jestjs - Jest RXjs6 Marbles,如何测试现有的 observable

我试图弄清楚如何为以下内容构建一个开玩笑的单元测试:

我有一堆想要在项目中测试的现有 observables 和主题。所以我开始了一个我认为是在 jest 中使用 RXjs 弹珠的简单测试用例:

虽然此测试确实运行,但它失败了。我无法理解测试运行的输出。我想知道我是否做错了什么,或者我是否对一般情况有错误的理解。或者也许只是对输出的一些解释会有所帮助。