2015-08-20 38 views
1

我使用摩卡,應該作爲我的測試框架節點js模塊。 到現在爲止它的工作正常,現在我需要聲明兩個對象相等。 和我得到錯誤(測試失敗),而對象是相同的(我使用webStorm 10)和差異窗口顯示兩個對象,他們相同(我也看到消息在差異窗口內容是相同的...)摩卡,應該斷言,不按預期工作

它可以和有一種方法來解決這個問題?

我嘗試用這兩者失敗

should(inObjBefore).be.exactly({env: outObjAfter}); 

inObjBefore.should.be.exactly({ env: outObjAfter}); 

回答

1

我現在無法測試這個,但它可能是這樣的,當你有兩個實例並且你有興趣知道它們的屬性是否相等時,它應該會檢查完全相同的對象實例。

I.e.

A = object.with.name.is.Joe 
B = otherObject.with.name.is.Joe 
a.should.equal(b) = true 
À.should.be.exactly(b) = false 

對不起OM NU電話,不能驗證這一點。

2

exactly使用全等確實精確的比較,即===。 在JavaScript中,對象按引用存儲,而不是按值存儲。因此,比較兩個對象時,他們只當他們是相同的平等對方:

var a = { 
    x: 10 
}; 

a === a // true 
a === { x: 10 } // false 

因此,無論你需要比較同一對象,或者您可以使用deepEqual

+0

我嘗試使用。應該。 inObjBefore.should.be.deepEqual({env:outObjAfter});我有錯誤?這是你的意思? –

+0

btw這兩個對象看起來完全相同{env:obj}和{env:obj2} –

+0

obj vs obj2正是它失敗的原因。只有obj等於(obj而不是obj2),它纔會成功。似乎你想比較屬性/屬性而不是引用/實例。使用等於。 – bastijn

0

您需要使用深度對象比較。使用.eql或.deepEqual(別名爲.eql)。 。與.equal完全相同,並與===做參考比較。