2017-07-19 3 views
1

Jest Dokumentation lautet:Was ist der Unterschied zwischen "toBe" und "toEqual" in Jest?

Tobe prüft nur, dass ein Wert ist, was Sie erwarten. Es verwendet ===, um strikte Gleichheit zu prüfen.

Und für toEqual:

Verwenden .toEqual, wenn Sie, dass zwei Objekte den gleichen Wert haben überprüfen möchten. Dieser Matcher überprüft rekursiv die Gleichheit aller Felder, anstatt nach der Objektidentität zu suchen - dies wird auch als "tief gleich" bezeichnet. Zum Beispiel verhalten sich toEqual und toBe in dieser Testsuite unterschiedlich, so dass alle Tests bestanden werden.

const x = { a: { b: 3 } }; 
    const y = { a: { b: 3 } }; 

    expect(x).toEqual(y); 
    expect(x).toBe(y); 

In diesem Fall toEqual Pässe aber toBe ausfällt. Ich verstehe, dass toEqual vergeht, weil es eine tief gleiche Prüfung macht. Warum schlägt der toBe in diesem Fall fehl?

Gibt es auch Best Practices für die Verwendung von toBe und toEqual (nicht nur in Jest, sondern auch in anderen Test-Frameworks)?

Antwort

2

Es schlägt fehl, weil x und y verschiedene Instanzen sind und nicht gleich wie in (x === y) === false. Sie können toBe für Primitive wie Strings, Zahlen oder Booleans für alles andere toEqual verwenden. Zum Beispiel

x = 4 
y = 4 
x === y // true 

x = 'someString' 
y = 'someString' 
x === y // true 

Auch leere Objekte

x = {} 
y = {} 
x === y //false 
+0

Also nicht gleich sind ich für nicht-Primitiven erraten, 'toBe' überprüft die Speicheradresse der Variablen? –

+0

Es ist nur eine einfache JS-Funktion, die Sie mit '=== ' –

+0

@SheonHan Ja, das ist richtig – nfw

Verwandte Themen