2012-12-09 7 views
6

Czy istnieje biblioteka asercji, która pokaże mi, jakie są różnice między dwoma obiektami w porównaniu głęboko?nodejs głęboko równy z różnicami

Próbowałem używać Chai, ale po prostu mówi mi, że obiekty są różne, ale nie gdzie. samo dla assert węzła ....

+0

Jakie ramy testowania wykorzystujesz? Czy jesteś otwarty na zmianę? –

+0

Używam mokki, jestem otwarty na zmianę tak. Ale naprawdę lubię mokkę;) – foobarcode

+0

Cóż, to zabawne - chciałem zaproponować, żebyś używał mokki. :) Może więc jestem zdezorientowany, ponieważ mocha daje ciąg różnic między rzeczywistymi a oczekiwanymi wartościami na niepowodzenie asercji. Wydaje mi się, że jest to niezależne od biblioteki asertywnej, chociaż dla mnie wygląda to dobrze z plikiem .j. Czy to jest to, czego chcesz, czy też chcesz drukować pliki diff, nawet jeśli twierdzenie nie zawodzi? –

Odpowiedz

2

Korzystanie chai 1.5.0 i 1.8.1, mokka następujących utworów dla mnie:

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"}); 
}); 

wyniki w:

✖ 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" 
    } 

Nie tutaj pokazane jest, że wyjście jest podświetlone na czerwono/zielono, gdzie linie są nieoczekiwane/brakuje.

2

Na podstawie numeru this StackOverflow answer sądzę, że problem ten wystąpił, ponieważ moje testy były asynchroniczne.

mam diffs poprawnie ponownie roboczych za pomocą następującego wzoru:

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

Tak tam jest: assert-diff

Można go używać tak:

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") 
}) 

wyniki w:

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