You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RxJS Marble测试中Observable帧变动导致用例执行失败问题咨询

Observable 帧规则及Marble测试不匹配问题说明

complete 通知本身会占用独立一帧,Observable发射值并结束后无法手动追加帧。

测试失败原因

当前测试帧不匹配的核心逻辑如下:

  1. 模拟的delete方法返回of({id}),该操作符会在同一帧同步完成「值发射」和「complete通知发送」两个动作
  2. 预期 marble 序列'a|'将两个动作拆分为两个独立帧:第0帧发射值a,第1帧发送complete,和of的行为不一致,因此出现complete对应帧时间戳变动的报错。

现有测试代码:

const c$ = delete('1');
const expected = cold('a|', {a: {id: '1'}})
expect(c$).toBeObservable(expected);

现有delete模拟实现:

delete = service.deletePath = (id): Observable<any> => {
    return of({id});
};

修复方案

  • 调整预期marble序列,用括号将多个事件合并为同一帧,匹配of的同步行为:
// 括号包裹的所有事件会在同一帧触发
const expected = cold('(a|)', {a: {id: '1'}})
  • 若业务逻辑中delete操作确实存在值发射到complete的帧差,修改模拟实现增加对应延迟:
delete = service.deletePath = (id): Observable<any> => {
    // 延迟1帧后发送complete,匹配原'a|'的时序
    return of({id}).pipe(delay(1));
};

内容的提问来源于stack exchange,提问作者Lilit Mazmanyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:06