typescript - Finnes det en jest-matcher som fungerer som toEqual, men som behandler null og undefined som like verdier?


Jeg har et API som ikke utelater JSON-serialisering for felt med "tomme" (null, none, nil) verdier og returnerer alle som "fieldName": null. Jeg har typede DTO-er i testkode (TypeScript), og jeg vil gjerne gjøre slike felt valgfrie (?) og la dem være undefined på mange steder. Dessverre (for meg) behandler jests toEqual() undefined (verdier i testkoden) og null (verdier fra API) som forskjellige verdier. Min nåværende løsning er å bruke unionstyper som string | null, men det er ganske omstendelig, fordi jeg alltid må initialisere disse feltene. Jeg sjekket jests referanse og fant ingen "ferdig" løsning. Så er det å lage en egen matcher den eneste måten å løse problemet på? Merk: Jeg kan ikke endre serialiseringspolicyen i API-et.

Svar #1

expect(null).toBe(undefined) mislykkes!

I utgangspunktet er det du har at noen ganger etter å ha evaluert et objekt har du null på den ene siden og undefined på den andre

Jeg prøvde å bruke andre jest-metoder som toEqual, men det fungerte rett og slett ikke.

Min løsning

expect(null == undefined).toBe(true)

Svar #2

Ved å bruke jest-extended (ekstra Jest-matchere vedlikeholdt av Jest-fellesskapet) kan du bruke toBeNil():

Bruk .toBeNil når du sjekker om en verdi er null eller undefined.

test('passes when value is null or undefined', () => {
  expect(null).toBeNil()
  expect(undefined).toBeNil()
  expect(true).not.toBeNil()
})

Se: https://github.com/jest-community/jest-extended#tobenil

Relaterte artikler