Jest: come testare le chiavi e le proprietà degli oggetti


94

Ho un punto in mapModulecui importa i componenti e li esporto:

import ComponentName from '../components/ComponentName';

export default {
  name: ComponentName,
};

Come posso verificare che mapModuleabbia le chiavi e i valori esportati corretti e che non siano nulli o indefiniti?

Risposte:


129

Nella versione 23.3.0 di jest,

expect(string).toMatch(string) 

si aspetta una stringa.

Uso:

const expected = { name:'component name' }
const actual = { name: 'component name', type: 'form' }
expect(actual).toMatchObject(expected)

il risultato è il superamento del test


101

puoi usare uno di quelli:

toEqual e toMatchObject sono abbinatori di modelli per gli oggetti:

let Obj = {name: 'component name', id: 2};
expect(oneObj).toEqual({name: 'component name'}) // false, should be exactly equal all Obj keys and values  
expect(oneObj).toMatchObject({name: 'component name'}) // true

o usa facilmente toHaveProperty:

let Obj = {name: 'component name'};
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true

24
Questa risposta non è più corretta. toMatchdovrebbe essere toMatchObjectcome specificato da @ user3605834
Kristoffer Dorph

1
È stato aggiornato in base al commento di @KristofferDorph
Despertaweb

8

Tieni presente che .toMatchObjectcontrolla "che un oggetto JavaScript corrisponde a un sottoinsieme delle proprietà di un oggetto". Quindi può avere affermazioni non intenzionali come tali:

expect({ a: 1, b: 2 }).toMatchObject({ a: 1 }); // pass

Se vuoi abbinare esattamente un oggetto, dovresti usare .toStrictEqual, disponibile da jest 23:

expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail

In realtà questa è esattamente l'affermazione per cui è progettato toMatchObject. Puoi usare ToEqual se non vuoi quel comportamento ...
Dan

0

Per una singola chiave puoi effettuare il check-out

expect(Boolean(obj[prop])).toBe(true | false);

Per chiavi multiple (dove devono essere tutte presenti) puoi usare,

expect(Boolean(obj[prop1]) && Boolean(obj[prop2])).toBe(true | false);

Per chiave multipla (dove deve essere presente una qualsiasi) è possibile utilizzare

expect(Boolean(obj[prop1]) || Boolean(obj[prop2])).toBe(true | false);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.