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