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:测试异步操作:自动订阅不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 NGXS 操作中调用后尝试关闭材料小吃吧不起作用

SpringBoot异步任务及Async不起作用的原因

多个异步操作在 ASP.NET Core 中不起作用

Kendo UI 异步上传在 Internet Explorer 中不起作用

使用 NGXS 订阅操作流的更简洁方式

具有异步 UIImageView 的自动布局 UITableViewCell 不起作用