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

如何测试返回Observable的trulyPipeOfObject函数

测试trulyPipeOfObject函数的实现方案

先明确函数核心逻辑:

  • 接收Observable输入,若发出真值则原样返回;若发出假值(null/undefined/空字符串等)则返回空对象
  • 若源Observable抛出错误,捕获后返回空对象的Observable

测试场景与对应模拟数据

  • 场景1:源Observable发出真值
    模拟数据:of({ name: 'test' })、of(123)、of('valid string')等任意非假值
  • 场景2:源Observable发出假值
    模拟数据:of(null)、of(undefined)、of('')、of(0)等假值
  • 场景3:源Observable抛出错误
    模拟数据:throwError(() => new Error('test error'))

完整测试代码

import { of, throwError } from 'rxjs';
import { trulyPipeOfObject } from './rx.utils';

describe('File: rx.utils.ts', () => {
  describe('Function: trulyPipeOfObject', () => {
    // 场景1:发出真值时返回原数据
    it('should return the original value when source emits a truthy value', async () => {
      const testData = { id: 1, content: 'truthy object' };
      const result = await trulyPipeOfObject(of(testData)).toPromise();
      
      expect(result).toEqual(testData);
    });

    // 场景2:发出假值时返回空对象
    it('should return empty object when source emits a falsy value', async () => {
      const falsyValues = [null, undefined, '', 0, false];
      
      for (const val of falsyValues) {
        const result = await trulyPipeOfObject(of(val)).toPromise();
        expect(result).toEqual({});
      }
    });

    // 场景3:抛出错误时返回空对象
    it('should return empty object when source throws an error', async () => {
      const error$ = throwError(() => new Error('mock error'));
      const result = await trulyPipeOfObject(error$).toPromise();
      
      expect(result).toEqual({});
    });
  });
});

补充说明

  • 使用toPromise()将Observable转换为Promise,配合async/await简化异步测试逻辑
  • 若使用RxJS 7+,也可以用firstValueFrom替代toPromise()(toPromise()已被标记为过时)
  • 假值测试用循环覆盖多种常见假值,确保函数对所有假值分支都处理正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:20:14