NGXS:测试异步操作:自动订阅不起作用
Posted
技术标签:
【中文标题】NGXS:测试异步操作:自动订阅不起作用【英文标题】:NGXS: Testing Asynchronous Actions: Automatic subscription doesn't work 【发布时间】:2020-05-29 00:18:14 【问题描述】:来自NGXS官网
-
我为 NGXS 商店编写单元测试(Jasmine + Karma,角度 2)
在异步操作中的 NGXS 存储中(就像 NGRX 中的效果)我们不订阅内部 - 我们只是返回可观察的。没关系,因为自动订阅有效。
但是当我启动测试时,异步操作 (EFFECTS) 的自动订阅 - 不起作用。结果 - 测试失败。
总结一下 - 我无法测试异步操作 NGXS
我已经尝试过的:
1)我在官网NGXS里写的(图中)2)我试过(done())构造,3)我试过actions$.subscribe()构造。
当我手动制作时它可以工作 - .subscribe() 在动作中 - 但这是个问题,因为它必须在没有这个的情况下工作
这是官方页面的链接:https://www.ngxs.io/recipes/unit-testing(主题:测试异步操作)
请帮忙:)
【问题讨论】:
【参考方案1】:来自官方页面的示例可以正常工作。如果您从一个返回 Observable 的操作中存根某个函数,请尝试将延迟嵌入到您的存根函数中。 例如,
stubFunc: () =>
return timer(0).pipe( ... );
【讨论】:
非常感谢!没错,订阅工作正常,但它返回未定义我想存根函数只是没有返回存根参数在存根函数中我改变了:return of(stub) return timer(0).pipe(mergaMap(()= >of(stub))) 它工作正常!谢谢!【参考方案2】:答案
`
// it doesn't work for me:
myStubFunction: () =>
return of(stubResult);
;
// the solution was
myStubFunction: () =>
return timer(0).pipe(mergMap(()=>of(stubResult)));
;
`
【讨论】:
以上是关于NGXS:测试异步操作:自动订阅不起作用的主要内容,如果未能解决你的问题,请参考以下文章