Wie kann ich mit Jest auf Gleichheit von Objektschlüsseln und Werten testen?

Lesezeit: 2 Minuten

Fassenbergs Benutzer-Avatar
Fassenberg

Ich habe ein mapModule wo ich Komponenten importiere und sie exportiere:

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

export default {
  name: ComponentName,
};

Wie kann ich das testen mapModule die korrekten exportierten Schlüssel und Werte hat und dass sie nicht null oder undefiniert sind?

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 das Bestehen der Prüfung

Benutzeravatar von toufek khoury
toufek khoury

Sie können eines davon verwenden:

toEqual und toMatchObject sind Template-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

  • .toHaveProperty ist das, wonach ich gesucht habe! Vielen Dank

    – KJ Sudarshan

    2. September 2021 um 7:52 Uhr

  • Wir müssen die Eigenschaftsnamen in einem Array hinzufügen

    – Codedeyya

    3. Januar um 23:53 Uhr

  • Das Erhalten von Expect(…).toMatchObject ist kein Funktionsfehler

    – Sri Vineeth

    14. Februar um 15:15 Uhr

Benutzeravatar von rtorres
rtorres

Denk daran, dass .toMatchObject Schecks

“dass ein JavaScript-Objekt mit einer Teilmenge der Eigenschaften eines Objekts übereinstimmt.”

So toMatchObject kann unbeabsichtigte Behauptungen enthalten wie zum Beispiel:

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

Wenn Sie ein Objekt genau abgleichen möchten, sollten Sie verwenden .toStrictEqualverfügbar seit jest 23:

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

  • Eigentlich ist das genau die Behauptung, für die toMatchObject entwickelt wurde. Sie können toEqual verwenden, wenn Sie dieses Verhalten nicht möchten …

    – Dan

    29. Oktober 2020 um 19:40 Uhr

  • Diese Antwort sollte in den meisten Fällen wirklich die bevorzugte Lösung sein.

    – Mikemaccana

    9. März 2021 um 19:49 Uhr

Ich habe diesen Tipp nur hinzugefügt und dachte, dass er meinen eigenen Tests eine noch bessere Granularität verleiht, insbesondere wenn ich Argumente mit verspotteten Diensten abgleiche:

expect.objectContaining({
   url: expect.stringContaining('https://'),
})

Alternativ können Sie Regex mit verwenden expect.stringMatching die die angegebene Regex gegen den Wert testet. Ziemlich ordentlich.

erwartet.stringEnthält
erwartet.stringMatching

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

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

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

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

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

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

Beeingers Benutzer-Avatar
beinger

Ein anderer Weg ist:

expect(JSON.stringify(object)).toBe(JSON.stringify(object))

Dadurch wird sichergestellt, dass die Objekte gleich sind.

Verwenden Sie jedoch Folgendes:

expect(object).toMatchObject(object)

ist in den meisten Fällen die beste Option.

1431580cookie-checkWie kann ich mit Jest auf Gleichheit von Objektschlüsseln und Werten testen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy