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.