2012-12-09 12 views
6

Gibt es eine Assertion-Bibliothek, die mir zeigt, was die Unterschiede zwischen zwei Objekten sind, wenn sie tief verglichen werden?nodejs tief gleich mit Unterschieden

Ich habe versucht mit Chai, aber es sagt mir nur, dass die Objekte anders sind, aber nicht wo. Das Gleiche gilt für die Assertion des Knotens ....

+0

Welchen Testrahmen verwenden Sie? Bist du offen für den Wechsel? –

+0

Ich benutze Mokka, ich bin offen für Veränderung ja. Aber ich mag wirklich Mocha;) – foobarcode

+0

Nun, das ist lustig - ich würde dir vorschlagen, Mokka zu benutzen. :) Also vielleicht bin ich hier verwirrt, weil Mocha Ihnen String Diffs zwischen den tatsächlichen und erwarteten Werten bei einem Assertionsfehler gibt. Ich denke, das ist unabhängig von der Assertion-Bibliothek, obwohl es für mich mit should.js gut geht. Ist es das, was Sie wollen, oder möchten Sie Diffs auch dann drucken, wenn eine Assertion nicht fehlschlägt? –

Antwort

2

mit chai 1.5.0 und 1.8.1 Mokka, die folgenden Werke für mich:

var expect = require('chai').expect; 

it("shows a diff of arrays", function() { 
    expect([1,2,3]).to.deep.equal([1,2,3, {}]); 
}); 

it("shows a diff of objects", function() { 
    expect({foo: "bar"}).to.deep.equal({foo: "bar", baz: "bub"}); 
}); 

Ergebnisse in:

✖ 2 of 2 tests failed: 

1) shows a diff of arrays: 

    actual expected 

    1 | [ 
    2 | 1, 
    3 | 2, 
    4 | 3, 
    5 | {} 
    6 | ] 

2) shows a diff of objects: 

    actual expected 

    { 
    "foo": "bar", 
    "baz": "bub" 
    } 

Was hier nicht angezeigt wird, ist, dass die Ausgabe bei unerwarteten/fehlenden Zeilen rot/grün hervorgehoben ist.

2

Basierend auf this StackOverflow answer, ich glaube, das Problem trat für mich auf, weil meine Tests asynchron waren.

bekam ich diffs mit dem folgenden Muster korrekt funktioniert wieder:

try { 
    expect(true).to.equal(false); 
    done(); // success: call done with no parameter to indicate that it() is done() 
} catch(e) { 
    done(e); // failure: call done with an error Object to indicate that it() failed 
} 
0

Ja, es gibt:

in
var assert = require('assert-diff') 

it('diff deep equal with message', function() { 
    assert.deepEqual({pow: "boom", same: true, foo: 2}, {same: true, bar: 2, pow: "bang"}, "this should fail") 
}) 

Ergebnisse: assert-diff

Sie es wie folgt verwenden können

1) diff deep equal with message: 
    AssertionError: this should fail 
{ 
- bar: 2 
+ foo: 2 
- pow: "bang" 
+ pow: "boom" 
} 
Verwandte Themen