Tengo problemas para escribir pruebas unitarias para observable en Angular... Estoy tratando de probar casos si displayPaymentsLineItem$ será verdadero o falso dependiendo de los valores de mobileAccountBalance$, y selectedMobileDigitalBill$... ¿Alguien puede ayudar?
public selectedMobileDigitalBill$: Observable<MobileDigitalBill>; public mobileAccountBalance$: Observable<MobileAccountBalance>; private expandedLinesMap: object = {}; private expandedTaxesAndFees: boolean = false; private devices: MobileDevice[] = []; private destroy$: Subject<void> = new Subject(); constructor(] private mobileStatementsTabFacade: MobileStatementsTabFacade, private billingMobileFacade: BillingMobileFacade, ) {} ngOnInit() { this.mobileAccountBalance$ = this.mobileStatementsTabFacade.mobileAccountBalance$; this.displayPaymentsLineItem$ = combineLatest([ this.mobileAccountBalance$, this.selectedMobileDigitalBill$, ]).pipe( map(([mobileAccountBalance, selectedMobileDigitalBill]: [MobileAccountBalance, MobileDigitalBill]) => { const isPastDue: boolean = mobileAccountBalance?.pastdue > 0; const hasPayments: boolean = selectedMobileDigitalBill?.payments?.length > 0; return isPastDue && hasPayments; }) ); } });Puede take(1) (tomar un valor, luego completar) y suscribirse para probar si el valor emitido es falso. Los observables deben completarse si los prueba de esta manera.
describe('The display payment line items observable', () => { it('should emit truthy', () => { displayPaymentsLineItem$ .pipe(take(1)) .subscribe(value =>{ expect(value).toBeTruthy(); }); } } Dicho esto, displayPaymentsLineItem$ no emitirá nada si los dos observables dentro combineLatest() no están definidos en su prueba. Dado que provienen de dos fachadas, es posible que deba proporcionarlos antes de comenzar su prueba.
Además, sobre su ejemplo de código:
displayPaymentsLineItem$ no se declara antes que el constructor.selectedMobileDigitalBill$ pero nunca se define antes de que se haga referencia dentro combineLatest() .