问题标签 [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 投票
2 回答
219 浏览

jasmine - 测试 NGRX 效果,延迟发出动作或不发出任何东西

我有一个 NGRX 效果 - 根据状态 - 发出延迟的动作或什么都不发出。我想写一个测试,涵盖这两种情况。

这是效果:

测试它应该发出带有延迟的 otherAction 的情况可以正常工作:

但我不知道如何测试另一个状态,它不应该发出另一个动作(流的长度为零):

请帮忙 :)

0 投票
2 回答
279 浏览

rxjs - rxjs asapscheduler 的执行顺序

考虑到我有以下代码:

我使用 asapScheduler 运算符。

根据文档,

asap 将等待当前同步执行的代码结束,然后它会尝试尽快执行给定的任务。

上述代码的执行顺序是什么?它们是如何工作的?我没想到最后会打印tap3

下面是输出,

0 投票
1 回答
102 浏览

typescript - 为什么在弹珠测试 Observables 时会出现 3 个额外的帧?

我正在测试以下 redux-observable 史诗:

我编写了两个类似的测试来验证 loginSuccess 和 loginFail 是否正常工作:(我排除了一些模拟操作):

登录成功

登录失败

它们都在工作,但是,测试框架说它预计比之前的测试多 3 帧。我不明白为什么。我希望有人可以向我解释。

0 投票
0 回答
24 浏览

javascript - 使用 rxjs 进行弹珠测试时如何暂停和恢复虚拟时间?

我正在尝试为同时具有反应性元素和非反应性元素的对象编写测试。我不知道如何写大理石图,所以测试是清晰的。

在下面的测试中,我有一个我正在测试的对象,它既存储一个值又将它发布给一个主题。我想编写测试,以便可以发出一些值、停止虚拟时间并检查一些断言。然后,我想恢复虚拟时间。所以,我想我想使用flush.

下面的测试成功,但不清晰:大理石图source2expected2不对齐,所以我不能真正“看到”测试是否正确编写。如果我source2在第一次调用上面定义expectObservable,那么第二次调用expectObservable永远不会看到任何值。

我尝试将订阅运算符添加^source,但似乎没有帮助。我还尝试使用冷的可观察对象,但我仍然无法编写弹珠,所以一切都很好地排列:

有没有办法编写此测试以使其看起来正确?

0 投票
1 回答
44 浏览

testing - Redux-observable 测试和丢失我的 Marbles

我想测试这个 observable 但我什么也没得到:

测试如下:

我得到的结果是:

● fetchUsersEpic › 应该获取用户

expect(received).toStrictEqual(expected) // 深度相等

  • 预计 - 18
  • 收到 + 1

显然我在这里遗漏了一些东西,我认为返回的值应该是带有一些数据的 fetchUsersSuccess() 回调,但我们得到的是一个空数组。能得到一些想法会很棒。

0 投票
2 回答
30 浏览

angular - TS 说对象属性在显示时不存在

我遇到了一个问题,我在一个存根函数的返回值上收到一条错误消息,它模拟了 Observable 的返回(使用rxjs-marbles)。

我遇到的问题是错误消息似乎表明返回类型上不存在对象的属性。

从单元测试文件

我收到以下类型错误:

如您所见,searchStatus它声称在 上不存在的属性Object literal就在错误消息中显示的类型定义中。它似乎没有抱怨其他属性。

请注意,这SearchStatus是一个枚举类型。

一切对我来说似乎都很好,那么为什么我会收到这个错误?

这是一个推断类型,所以我虽然可能有助于使函数的返回显式,但它没有帮助,我仍然有同样的问题。

对于进一步的上下文,如果需要,这里是函数,函数本身依赖。第一个函数是提供打字稿用来推断预期回报的详细信息的函数。

0 投票
1 回答
78 浏览

angular - 交换可观察数组中的元素

我正在尝试交换可观察数组中的两个项目。我知道如何在普通数组中做到这一点。我尝试了相同的方法,但它不会改变值。

我的 Stackblitz 代码

这是我尝试过的,

0 投票
1 回答
29 浏览

angular - Rxjs 弹珠测试:如何模拟用户与 observables 的交互

我想测试一个 Angular 服务,我将简化我的案例以使其简单:

我有一个behaviourSubject 绑定到我的服务中的一个可观察对象

我要测试的是多次填写用户名的简单用户交互:

但是当我启动这个测试时,只有主体发出的最后一个值在 observable 中。

有没有办法在不将 BehaviorSubject 更改为 ReplaySubject 的情况下在 observable 中获取 2 个值?

0 投票
1 回答
60 浏览

angular - 如何在大理石测试中从服务中模拟 observable

我想测试一个包含我的逻辑的 Angular 服务。我将简化我的案例以使其简单明了:

我有我想要测试的 logic$,它绑定到 data$,另一个 observable

我希望能够在我的测试中模拟数据并查看我的逻辑是否按预期运行

我收到以下错误:

据我所知,显然我的模拟不起作用。logic$ 的长度为 1,数据仅发出 '' (由 behaviorSubject 发出) .

有没有办法正确替换 observable 来测试服务中的逻辑?