Scherz: So testen Sie auf Objektschlüssel und Eigenschaften


86

Ich habe einen Ort, an mapModuledem ich Komponenten importiere und exportiere:

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

export default {
  name: ComponentName,
};

Wie kann ich testen, ob mapModuledie exportierten Schlüssel und Werte korrekt sind und ob sie nicht null oder undefiniert sind?

Antworten:


119

In Version 23.3.0 von jest,

expect(string).toMatch(string) 

erwartet eine Zeichenfolge.

Verwenden:

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

Ergebnis ist Test bestanden


97

Sie können eine davon verwenden:

toEqual und toMatchObject sind Vorlagen-Matcher für Objekte:

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

oder verwenden Sie einfach toHaveProperty:

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

24
Diese Antwort ist nicht mehr richtig. toMatchsollte toMatchObjectwie von @ user3605834 angegeben sein
Kristoffer Dorph

1
Es wurde gemäß dem Kommentar von @KristofferDorph aktualisiert
Despertaweb

7

Beachten Sie, dass .toMatchObjectüberprüft wird, ob ein JavaScript-Objekt mit einer Teilmenge der Eigenschaften eines Objekts übereinstimmt. Es kann also unbeabsichtigte Behauptungen als solche geben:

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

Wenn Sie ein Objekt genau zuordnen möchten, sollten Sie Folgendes verwenden .toStrictEqual: verfügbar seit jest 23:

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

Genau dafür ist die Behauptung von MatchObject ausgelegt. Sie können toEqual verwenden, wenn Sie dieses Verhalten nicht möchten ...
Dan

0

Für einen einzelnen Schlüssel können Sie auschecken

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

Für mehrere Schlüssel (wo alle vorhanden sein müssen) können Sie verwenden,

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

Für mehrere Schlüssel (wo einer vorhanden sein muss) können Sie verwenden

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.