带有 rxjs zip

问题描述

我有一个简单的异步验证器函数,在给定字符串列表的情况下,它会检查字符串是否作为代码存在于给定的 icdService 中(代码被简化以获取字符串列表 - 在现实和测试中,函数获取对象列表 - 但它们可以简单地映射以获取字符串列表)

export const faultyICDCodesInSynonymListValidator = (
  icds: string[],icdSearchService: IcdSearchService,): Observable<ValidationErrors | null> => {
  const icd10ObsList = icds.map((icdSyn: string) => icdSearchService.findIcd10ForCode(icdSyn));

  return zip(...icd10ObsList).pipe(
    map(res => {
      const faultyICDs = [];

      res.map((e,i) => {
        if (!e) {
          faultyICDs.push(icds[i]);
        }
      });
      return faultyICDs.length ? { faultyICDs } : null;
    }),);
};

这工作正常,并且表单已正确验证。然而,当我想使用茉莉花弹珠为此编写测试时,麻烦就来了。我有 2 个测试 - 一次当代码存在时,一次当它不存在时。我已经尝试了各种热/冷、时间、完成的随机组合......但由于我不知道发生了什么,我总是得到失败的结果,因为我不知道发生了什么......这里是测试:>

fdescribe('faultyICDCodesInSynonymListValidator',() => {
    let icdSearchService: IcdSearchService;

    beforeEach(() => {
      Testbed.configureTestingModule({
        providers: [provideMockStore({ initialState: {} })],});
      icdSearchService = Testbed.inject(IcdSearchService);
    });

    it('should return array with invalid icd codes',() => {
      // given
      spyOn(icdSearchService,'findIcd10ForCode').and.returnValue(of(undefined));

      const expected = hot('a|',{
        a: { faultyICDs: ['M45'] },});
      // then
      expect(faultyICDCodesInSynonymListValidator([basicICDSynonym],icdSearchService)).toBeObservable(expected);
    });

    fit('should return null as all icd codes are valid','findIcd10ForCode').and.returnValue(of(createIcd10({ code: 'M45' })));
      // when

      const source = hot('-a|',{
        a: faultyICDCodesInSynonymListValidator([basicICDSynonym],icdSearchService),});

      const expected = hot('-b|',{
        b: null,});
      // then
      expect(source).toBeObservable(expected);
    });
  });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)