2014-01-19 47 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