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

jasmine - Jasmine-marbles - 是否有 expect(...).ToHaveBeenCalledWithObservable(...) 函数?

有没有办法在函数参数中测试 observable ?有什么类似的expect(someObj.foo).ToHaveBeenCalledWithObservable(cold('a|', {a: 1}))吗?

0 投票
1 回答
192 浏览

angular - Angular Unit Test - 嵌套的异步管道

考虑以下代码:

这是我的一个组件的简化。我试着写一个基本的单元测试:

我正在使用 jasmine marbles 库。

问题是跨度没有正确的值,它总是空的。我猜是因为 2 个嵌套的异步管道。刷新 observables 后,ngIf 条件变为 true,创建 span 并创建user$的新订阅。但是因为 observable 完成了,span 会是空的。

我不确定这是否是正确的解释......

我的问题是我应该如何测试这种场景?

谢谢!

0 投票
1 回答
505 浏览

angular - Angular NgRx 集成测试不起作用(使用 Nx 和 Jest)

我有一个门面类,它在窗帘后面使用 NgRx。当我在我的应用程序中使用它时,外观本身正在工作,但是通过集成测试它不起作用(更好的说法是:测试不起作用)。我正在使用 Nx(不认为这很重要)和 Jest。

注意:对于集成测试,我的意思是我不想模拟 NgRx 部分,我也想测试 NgRx 逻辑。只有数据服务被模拟。

外观类非常简单。这是它的摘录:

已分配的loadProfile操作会触发一个效果,该效果会返回包含通过 ProfileService 获取的数据的 ProfileLoadSucceeded 操作。然后,reducer 捕获此操作,将配置文件数据放入存储中,并将 isProfileLoaded 属性设置为 true。

这是我的集成测试的设置:

以下是我在集成测试中尝试过的许多事情的选择:

  1. 使用 expect(...).toBeObservable(...)

  2. 使用 toPromise() 和 then()

  3. 与 expect(...toPromise()).resolves()

  4. 使用 subscribe 和 done()

我只是展示了 isProfileLoaded 的测试,但我对数据本身的测试也有同样的问题。结果值始终为 false 或 null:外观的选择器结果似乎没有反映商店的内容。

不过,这家商店本身似乎运作良好。通过在不同的地方添加 console.log 语句,我可以看到来自模拟服务的数据正在正常流动。它存在于效果、reducer 和结果状态中。

我想我遗漏了一些明显的东西,但是什么?我还没有找到使用这种技术组合执行这种集成测试的示例。

0 投票
1 回答
282 浏览

angular - 非调度效果的单元测试

我正在尝试为非调度效果编写单元测试(基于ngrx指南:https ://ngrx.io/guide/effects/testing )但由于未知原因,效果似乎没有捕捉到动作而且我不明白我的测试有什么问题。

影响:

单元测试:

如果添加以下行,则效果捕获动作并进入 switchmap + tap 中的逻辑:

尽管我收到此行的错误并且 效果的实际值(initAuthFromLocalStorage$)是一个对象而不是可观察的。

谢谢!

0 投票
1 回答
62 浏览

angular - 使用 Jasmine 弹珠运行测试时未执行 NGRX 效果

嗨,我是 NGRX 的新手,正在尝试为我创建的效果编写测试,但是看起来效果功能从未真正运行过。

我要测试的效果是:

目前的测试版本如下:

因此,当运行上述测试时,第一个期望失败并且它返回[]而不是预期的操作。

任何线索我在这里缺少什么?

0 投票
2 回答
38 浏览

rxjs - 我们应该避免嵌套的 rxjs 操作符吗?一个我无法测试的案例

我在使用rxjs. 上MyActions.myAction,我收到一个包含一个属性的对象ids- 一个 id 数组 - 对于每个 id 我想通过它发送一个 HTTP 请求this.myApiService.getResource,它返回一个Observable<Resource>. 然后我想将所有结果收集到一个数组中,并调度另一个传递数组的动作。

上面的代码完成了这项工作,但我想知道是否应该避免嵌套两个反应式运算符流,以及是否有更好的方法来编写它。

我想知道的原因是我在为它编写测试时遇到了问题。我在下面写了测试,但我不能让它通过。

我得到的错误是:

0 投票
2 回答
219 浏览

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

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

这是效果:

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

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

请帮忙 :)

0 投票
1 回答
122 浏览

rxjs - RXJS 大理石测试

我对 mergemap 进行了测试,但它没有返回正确的预期结果。有人能帮我吗?

谢谢!

0 投票
0 回答
295 浏览

angular - 在测试中成对不触发时可观察到

尝试测试成对使用的方法。

方法:

用于演示目的。我知道我不需要成对的。假装我愿意。

测试:

但是订阅中的代码永远不会被调用。调用它的唯一方法是删除pairwise. 有任何想法吗?

0 投票
2 回答
431 浏览

angular - 使用 ngIf 异步管道可观察到 Jasmine 大理石测试

我想Observable用 jasmine-marble 测试测试一个,但不幸的是我不知道如何触发更改检测ngIf,这应该呈现组件。

这是我的课程的简化版本:

还有我的html文件:

这是我当前的测试,失败了:

不幸的是我得到的都是这个

服务或可观察对象本身没有问题,但在我看来,由于某种原因,DOM 不会触发使用异步管道来渲染组件的更改检测。

PS:当我使用时,getTestScheduler().flush()我得到了错误Can't subscribe to undefined