微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 rxjs zip

如何解决带有 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 举报,一经查实,本站将立刻删除。