2014-01-19 87 views
1

我用下面的代碼在我的客戶端檢查響應:Asse田在節點使用測試客戶端時,JS

assert.strictEqual(data,{'status':'ok','message':'tweet received'}); 

這是在發送消息時,我寫的代碼:

res.send({status:'ok',message:'tweet recieved'}); 

這是我得到的錯誤:

assert.js:92 
throw new assert.AssertionError({ 
    ^
AssertionError: "{\n \"status\": \"ok\",\n \"message\": \"tweet recieved\"\n}" === {"status":"ok","message":"tweet received"} 
at IncomingMessage.<anonymous> (/home/anr/Desktop/node js/mvc/ntwittertest.js:22:10) 
at IncomingMessage.EventEmitter.emit (events.js:117:20) 
at _stream_readable.js:920:16 
at process._tickCallback (node.js:415:13) 

回答

2

響應你得到的是字符串格式。您可能必須執行JSON.parse才能獲得JavaScript對象。

JSON.parse(data) 

但是,要比較兩個對象,你可能想對它們做兩個對象,並將它們作爲字符串進行比較。

JSON.stringify(JSON.parse(data)) === JSON.stringify(other_object) 

即使這種方法也有它自己的問題。只有當兩個表達式指向同一個對象時,嚴格比較兩個對象纔會成功。例如,即使

var obj1 = {}; 
var obj2 = {}; 
var obj3 = obj1; 
console.log(obj1 === obj2); 
console.log(obj1 === obj3); 

obj1obj2是相同的,它們是不相同的。所以,它將返回false。但在第二種情況下,它們都指向同一個對象。這就是爲什麼它返回true

閱讀關於對象比較,在this question獲取更多信息。

我會推薦,解析JSON字符串到一個有效的JavaScript對象,然後做成員級別的比較。

+0

只是使用JSON.parse將返回false,因爲它們是兩個不同的對象,不能嚴格等於。我猜會員級別的比較會更好。 – vamsiampolu

+0

@ user2309862是的:)這就是我在我的回答中推薦的:) – thefourtheye