2016-07-04 19 views
0

Ich erhalte die folgende scheitern Nachricht von Mocha zu sein:Kann nicht erhalten Objekte gleich

Uncaught AssertionError: expected Object { name: 'John Doe' } to be Object { name: 'John Doe' } 
+ expected - actual 

Hier ist mein Testcode:

describe("A user gets registered", function() { 
    it('should create a SINGLE user on /api/register POST', function (done) { 
     //calling REGISTER api 
     server 
       .post('/api/register') 
       .send({ 
        name: "John Doe", 
        username: "john", 
        password: "open" 
       }) 
       .expect("Content-type", /json/) 
       .expect(200) 
       .end(function (err, res) { 
        var data = { 
         "name": "John Doe" 
        }; 
        res.status.should.equal(200); 
        res.body.should.equal(data); 
        done(); 
       }); 
    }); 
}); 

Und hier ist meine eigentliche Code:

Allerdings sollte ich keine Fehlermeldung von Mocha bekommen, weil beide Objekte gleich sind. Aber irgendwie sind sie nicht so, ich weiß wirklich nicht, was ich falsch mache.

Ich habe bereits den Abstand der beiden Objekte überprüft, so dass dies nicht der Fall sein sollte.

+1

Versuchen Sie 'deepEqual'? http://stackoverflow.com/questions/13225274/the-difference-between-assert-equal-and-assert-deepequal-in-japascript-testing-w – evolutionxbox

+1

in Javascript '({} === {})' zurück 'false' impliziert, dass kein 2-Objekt direkt verglichen werden kann, aber ihre Schlüsselwertpaare könnten verglichen werden. –

Antwort

1

2 Objekte können nicht gleich sein, obwohl ihre Daten gleich sind, weil sie in einem Speicher als 2 verschiedene enitities gespeichert sind

var data = { 
name: 'piyush'}; 

var data1 = { 
name: 'piyush' 
} 

Daten == data1 // false

0

Wenn beiden Objekte haben ihre Schlüssel in der gleichen Reihenfolge/haben die gleiche Struktur, Sie können JSON.stringify verwenden und dann die Strings vergleichen. Dies funktioniert jedoch nur, wenn alle Schlüssel primitive Werte sind. Wenn ein anderes Objekt als einer der Schlüssel verwendet wird, benötigen Sie etwas komplexeres.