430 Stimmen

Jasmin JavaScript Testing - toBe vs toEqual

Sagen wir, ich habe folgendes:

var myNumber = 5;
expect(myNumber).toBe(5);
expect(myNumber).toEqual(5);

Beide der oben genannten Tests werden bestehen. Gibt es einen Unterschied zwischen toBe() und toEqual() bei der Auswertung von Zahlen? Wenn ja, wann sollte ich das eine und nicht das andere verwenden?

3voto

feyzullahyildiz Punkte 195

Ich denke, toEqual überprüft die Tiefe einer Gleichheit, toBe ist die gleiche Referenz von 2 Variablen

  it('test me', () => {
    expect([] === []).toEqual(false) // true
    expect([] == []).toEqual(false) // true

    expect([]).toEqual([]); // true // tiefe Prüfung
    expect([]).toBe([]); // false
  })

1voto

Jared Tomaszewski Punkte 773

Gedacht, jemand könnte eine Erklärung anhand eines beispielhaften (kommentierten) Beispiels mögen:

Im Folgenden, wenn meine deepClone() Funktion ihre Arbeit richtig macht, wird der Test (wie im 'it()' Aufruf beschrieben) erfolgreich sein:

describe('deepClone() array copy', ()=>{
    let source:any = {}
    let clone:any = source
    beforeAll(()=>{
        source.a = [1,'string literal',{x:10, obj:{y:4}}]
        clone = Utils.deepClone(source) // DIE ZU TESTENDE KLONAKTION - mal sehen, ob sie das richtig macht.
    })
    it('soll einen Klon erstellen, der eine eindeutige Identität hat, aber gleiche Werte wie das Quellobjekt',()=>{
        expect(source !== clone).toBe(true) // Wenn wir unterschiedliche Objektinstanzen haben...
        expect(source).not.toBe(clone) // <= Synonym zum obigen. Wird fehlschlagen, wenn: Sie das '.not' entfernen, und wenn: die beiden verglichenen Objekte tatsächlich unterschiedliche Objekte sind.
        expect(source).toEqual(clone) // ...die gleiche Werte halten, werden alle Tests erfolgreich sein.
    })
})

Natürlich ist dies keine vollständige Testreihe für meine deepClone(), da ich hier nicht getestet habe, ob das Objektliteral im Array (und das darin verschachtelte) auch eine unterschiedliche Identität, aber gleiche Werte haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X