问题标签 [jasmine-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 回答
1048 浏览

unit-testing - 与测试中的所有可观察对象相比,如何刷新一个冷可观察对象?

getTestScheduler().flush()刷新测试中的所有 observables。有没有办法细粒度地刷新可观察对象?

例如cold('--x', {x: {}}).flush()

0 投票
1 回答
1943 浏览

angular - 如何用茉莉弹珠测试主题

Angular 6、Rxjs、Jest、Jasmine-marbles。

非常常见的场景:搜索服务器端项目的组件。在组件中,有一些控件可以更改搜索条件,我想以“反应式”进行编码。所以在组件代码中我有这样的东西:

也就是说,Subject每次 UI 中的某些内容发生更改时都会触发搜索条件。

现在我想测试一下,搜索服务只会被调用以获取不同的输入。我可以用这种方式“没有弹珠”:

现在我想用jasmine marbles转换这个测试,但我不知道如何......

我想要这样的东西:

显然,它不起作用...

更新

以某种方式关闭...使用“测试助手”

0 投票
1 回答
918 浏览

angular - 使用 jest 和 jasmine-marbles 测试 ngrx 效果时的问题

我正在使用jestjasmine-marbles测试我的ngrx-effects. 到目前为止一切顺利,但我有一个特殊情况,我需要使用它withLatestFrom来访问Store内部效果,如下所示:

我也确实像这样设置了我的测试:

我还注意到我成功地为Store和设置了模拟,Actions因为所有其他测试都可以正常工作。这与其他之间的唯一区别是StorewithLatestFrom在这些效果中不存在。

最后这是我得到的错误输出:

有什么想法吗?

0 投票
2 回答
2040 浏览

unit-testing - RxJS Marble 测试:expectObservable 与 toBeObservable

有什么区别:

句法?

是一个测试库的问题还是只是一个味道?

0 投票
1 回答
295 浏览

angular - rxjs-marbles 测试没有任何期望

我使用rxjs-marbles在我的 Angular 7 应用程序中测试 observables。但它看起来m.expect并没有被茉莉认可为预期。

我有以下测试:

当我运行它时,我在控制台中收到错误:

同样在浏览器输出中,我的测试前缀为:

SPEC HAS NO EXPECTATIONS should see expectations

添加expect(true).toBe(true);解决了这个问题,但这并不是我真正想要的方式。

如何注册m.expect为茉莉花的期望?

0 投票
1 回答
1284 浏览

rxjs - ngrx + 大理石测试 + 延迟

假设我有效果

大理石测试应该是什么样子?

作为回报,我得到

0 投票
1 回答
659 浏览

angular - 如何对进行中 RXJS 请求的取消进行单元测试

我正在使用 NGRX,并使用 Effects 发送 HTTP 请求。如果用户发送另一个请求,则应取消任何先前的请求。当我手动测试时它工作正常,但我希望能够对此进行单元测试。为了测试这一点,我模拟了发送 HTTP 请求并在一定延迟后发送响应的服务。然后,我有一个触发 4 个请求的 Marble hot observable。我希望我的效果只触发一次。但是,它根本没有被触发。

单元测试:

所以,我发送了 4 个搜索请求;第一个应该在 6 秒后返回数据,第二个应该在 5 秒后返回数据,依此类推。但是,我的单元测试失败了 loadData$ 是一个空的可观察对象,而它期望有一个项目。

如果我删除间谍中的延迟,它会按预期工作,并且 loadData$ 包含 4 个结果。

我的效果是使用 NX DataPersistence,如果您提供 id 函数,它会负责取消;如果新的操作带有相同的 id,它将取消初始请求。类似于使用 this.actions$.pipe(switchMap(...))

0 投票
1 回答
2034 浏览

angular - 在 RxJs 和 Angular 中测试可观察的“下一个”回调

我正在尝试使用 RxJs Observables 在 Angular 中做一个非常简单的测试,但我做不到。这就是我基本上要测试的内容:

当后面的可观察对象发出一个值testMe时,我如何测试它是否正确更新?methodReturningObservable

我用这个尝试过:

所以,tick()这里似乎没有做任何事情。没有什么能让我cold对我的间谍产生任何价值。

我尝试了,如大理石部分下的https://netbasal.com/testing-observables-in-angular-a2dbbfaf5329getTestScheduler.flush()所示。

我可以使用这样的弹珠在可观察对象上发出值吗?只需触发摘要,这在 AngularJS 中非常容易,但我似乎无法让 Anguar 让我进入下一个可观察对象的回调。

0 投票
2 回答
2565 浏览

angular - 单元测试 - 获取 TypeError:您在预期流的位置提供了无效对象

我正在尝试进行单元测试,其中效果使用服务从 API 获取结果,然后触发成功操作或错误操作。我不断收到错误TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.。不完全确定需要更改哪些内容才能使其正常工作。

包括错误检查测试和相关代码。

测试

影响

服务

更新:添加了 debounce 以触发弹珠错误。还是需要替代的withLatestFrom

0 投票
1 回答
2572 浏览

angular - 如何使用 jasmine-marbles 测试 forkJoin() 运算符

我创建了将数据发送到后端的服务,数据由用户在 UI 中填充。用户也可以上传任何文件以将其发送到后端。我正在尝试用茉莉弹珠测试此功能。

这是我的服务代码:

如果用户添加一个或多个附件,那么在我将用户数据发送到后端之前,我需要将每个附件上传到后端以获取每个附件的令牌,然后我将其存储在数组中。我正在这样做forkJoin(),等到所有附件都上传完毕,然后switchMap用于提交用户数据。

这是我的两个测试用例(一个工作,一个不工作):

测试表单数据在哪里没有附件是成功的,但是测试表单数据在哪里有附件失败。

失败的错误信息:

✖ 提交附件 HeadlessChrome 71.0.3578 (Mac OS X 10.14.2) 错误:预期 $.length = 0 等于 2。预期 $[0] = 未定义等于 Object({ frame: 10, notification: Notification({ kind :'N',值:['token'],错误:未定义,hasValue:真})})。预期 $[1] = undefined 等于 Object({ frame: 40, notification: Notification({ kind: 'N', value: Object({ id: 'id_123' }), error: undefined, hasValue: true }) } )。

似乎outputis not emitting observable in failed test and is undefined,但问题是 - 为什么?因为在另一个测试中,它在不发送附件和使用forkJoin().

任何人都知道为什么会这样?谢谢!