2012-12-09 30 views
6

Derinlemesine kıyaslandığında iki nesne arasındaki farkların neler olduğunu gösteren bir onaylama kütüphanesi var mı?nodejs farklarla derin eşit

Chai'yi kullanmayı denedim ancak yalnızca nesnelerin farklı olduğunu değil, nerede olduğunu söyler. dahası var, bekle ama: düğümün assert için Aynı şey ....

+0

Hangi test çerçevesini kullanıyorsunuz? Anahtarlamaya açık mısın? –

+0

Şu an mocha kullanıyorum, değişiklik yapıyorum Evet. Ama ben gerçekten mocha'yı seviyorum;) – foobarcode

+0

Bu komik - mocha'yı kullanmanızı tavsiye edecektim. :) Bu yüzden şaşkınım çünkü burada mocha size bir iddianın başarısızlığıyla ilgili gerçek ve beklenen değerler arasında bir ayrım yapabiliyor. Bence bu, iddianın kütüphanesinden bağımsızdır, ancak benim için should.js ile uyumludur. İstediğin bu mu, yoksa bir iddia başarısız olduğunda bile fark basıyor musun? –

cevap

2

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

sonuçlar:

chai 1.5.0 ve mocha 1.8.1 benim için şu işleri kullanma
✖ 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" 
    } 

Burada gösterilmeyen, çıktıların satırların beklenmedik/eksik olduğu kırmızı/yeşil renkte vurgulanmasıdır.

2

this StackOverflow answer tabanına dayanarak, bu sorunun benim için gerçekleştiğine inanıyorum çünkü testlerim eşzamansızdı.

aldığım aşağıdaki deseni kullanarak tekrar düzgün çalışmasını diffs:

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

Evet vardır: içinde

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

sonuçları: assert-diff

Böyle kullanabilirsiniz

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