Jest: Jak testować klucze obiektów i właściwości

86

Mam miejsce, w mapModulektórym importuję komponenty i eksportuję je:

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

export default {
  name: ComponentName,
};

Jak mogę to sprawdzić, czy mapModulema prawidłowe wyeksportowane klucze, wartości i czy nie są one puste ani nieokreślone?

fasenberg
źródło

Odpowiedzi:

119

W wersji 23.3.0 jest,

expect(string).toMatch(string) 

oczekuje łańcucha.

Posługiwać się:

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

wynik to zaliczenie testu

user3605834
źródło
97

możesz użyć jednego z tych:

toEqual i toMatchObject są wzorcami dopasowującymi obiekty:

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

lub w prosty sposób użyj toHaveProperty:

let Obj = {name: 'component name'};
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true
toufek khoury
źródło
24
Ta odpowiedź nie jest już poprawna. toMatchpowinno być toMatchObjectzgodne z opisem @ user3605834
Kristoffer Dorph
1
Został zaktualizowany zgodnie z komentarzem @KristofferDorph
Despertaweb
7

Pamiętaj, że .toMatchObjectsprawdza, „czy obiekt JavaScript pasuje do podzbioru właściwości obiektu”. Może więc mieć niezamierzone twierdzenia jako takie:

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

Jeśli chcesz dokładnie dopasować obiekt, użyj .toStrictEqual, dostępne od jest 23:

expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail
rtorres
źródło
Właściwie to jest dokładnie to, do czego służy asercja toMatchObject. Możesz użyć toEqual, jeśli nie chcesz takiego zachowania ...
Dan
0

Za jeden klucz możesz sprawdzić

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

W przypadku wielu kluczy (gdzie wszystkie muszą być obecne) możesz użyć,

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

W przypadku kluczy wielokrotnych (w przypadku których musi być dowolny) można użyć

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

Devorein
źródło