2016-03-29 3 views
0

Ich bin eine binäre Baum-Klasse in Javascript erstellen und mein Test ist fehlgeschlagen, aber ich sehe nichts falsch mit meiner Methode und ich erhalte keine diff. Jede Einsicht wäre großartig.Mocha/chai Behauptung ist scheitern, aber es gibt keine diff

Hier ist meine Klasse:

function binaryTree() { 
     this.root = null; 
    }; 
    binaryTree.prototype = { 
    constructor: binaryTree, 
    add: function(val) { 
     var root = this.root; 
     if(!root) { 
      this.root = new Node(val); 
      return; 
     } 
     var currentNode = root; 
     var newNode = new Node(val); 
     while(currentNode) { 
      if(val < currentNode.value) { 
      if(!currentNode.left) { 
       currentNode.left = newNode; 
       break; 
      } 
      else { 
       currentNode = currentNode.left; 
      } 
      } 
      else { 
      if(!currentNode.right) { 
       currentNode.right = newNode; 
       break; 
      } 
      else { 
       currentNode = currentNode.right; 
      } 
      } 
     } 
     } 

mein Test hier:

it('adds values to the binary tree', function() { 
    var test = new binaryTree(); 
    test.add(7); 
    test.add(43); 
    test.add(13); 
    test.add(27); 
    test.add(82); 
    test.add(2); 
    test.add(19); 
    test.add(8); 
    test.add(1); 
    test.add(92); 

    expect(test).to.equal({ 
    root: 
    { value: 7, 
     left: 
     { value: 2, 
      left: { value: 1, left: null, right: null }, 
      right: null }, 
     right: 
     { value: 43, 
      left: 
      { value: 13, 
      left: { value: 8, left: null, right: null }, 
      right: 
       { value: 27, 
       left: { value: 19, left: null, right: null }, 
       right: null } }, 
      right: 
      { value: 82, 
      left: null, 
      right: { value: 92, left: null, right: null } } } } 
    }); 
}); 

Und hier ist der Fehler Ich erhalte:

1) binary tree tests adds values to the binary tree: 

    AssertionError: expected { Object (root) } to equal { Object (root) } 
    + expected - actual 

Wenn ich mess around mit den Werten Im Testobjekt sehe ich ein diff, so dass es für mich aussieht als wäre alles gleich und ich bin ratlos. Ich würde es wirklich schätzen, wenn ich ein zweites Augenpaar darauf bekommen könnte.

Antwort

1

Sie verwenden Mocha to.equal Erwartung, aber das testet für strenge Gleichheit. http://chaijs.com/api/bdd/#method_equal

Zwei Objekte, auch wenn sie alle die gleichen Schlüssel-Wert-Paare haben, werden nicht zu einem Triple-Equals (===) Vergleicher zurückkehren. Dies liegt daran, dass es sich tatsächlich um zwei separate Objekte handelt, die im Speicher gespeichert sind und sich ähneln.

Verwenden Sie stattdessen to.deep.equal!

Sinn machen?

+0

Ich komme, wo du herkommst und ich habe das versucht, aber das ist nicht die Antwort. Sie können einfach nicht zwei Objekte in Javascript perfekt mit Nötigung vergleichen, aber Sie können diese Objekte leicht stringifizieren und die Strings vergleichen. – lepp

0

Falls jemand auf dieses Problem stößt, habe ich das Problem gefunden. Zwei Objekte können in JavaScript nicht perfekt verglichen werden, auch wenn alle Eigenschaften gleich sind. This post hat zwei Methoden, um diese Einschränkung zu arbeiten, von denen eine sehr einfach war, in diesem Fall zu implementieren:

Ändern expect(test).to.equal({-expect(JSON.stringify(test)).to.equal(JSON.stringify({ ermöglichen diesem Test zu bestehen. Das Verfolgen der Objekte ist eine sehr einfache Möglichkeit, zwei Objekte miteinander zu vergleichen. Dies funktioniert jedoch nur, wenn die Eigenschaften in genau der gleichen Reihenfolge sind.