2012-12-09 162 views
6

是否有一個斷言庫,會告訴我什麼是深深比較時兩個對象之間的差異?nodejs深深等於差

我試過用柴,但它只是告訴我,對象是不同的,但不是在哪裏。 節點的斷言同樣的事情....

+0

你在使用什麼測試框架?你打開切換? –

+0

我正在使用摩卡,我願意改變是的。但我真的很喜歡摩卡;) – foobarcode

+0

好吧,這很有趣 - 我會建議你使用摩卡。 :)所以,也許我在這裏感到困惑,因爲摩卡給出了斷言失敗時實際值和期望值之間的字符串差異。我認爲這與斷言庫無關,儘管它對should.js適用於我。這就是你想要的,或者即使斷言沒有失敗,你是否還希望打印差異? –

回答

2

使用柴1.5.0和1.8.1摩卡,我以下工作:

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

結果:

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

這裏沒有顯示的是,輸出以紅色/綠色突出顯示,其中行意外/缺失。

2

基於this StackOverflow answer,我認爲這個問題對我來說很重要,因爲我的測試是異步的。

我的diff正確再次通過以下方式工作:

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

是的,有:在

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

結果:assert-diff

您可以使用它像這樣

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