在节点JS中使用testing客户机时发生AssertionError

我在客户端使用下面的代码来检查响应:

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) 

你得到的回应是string格式。 您可能必须执行JSON.parse来获取JavaScript对象。

 JSON.parse(data) 

但是,要比较两个对象,您可能需要对它们执行JSON.stringify ,并将它们作为string进行比较。

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

即使这个方法也有它自己的问题。 只有当两个expression式指向同一个对象时,严格比较两个对象才会成功。 例如,

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

尽pipeobj1obj2是相同的,但它们并不相同。 所以,它会返回false 。 但在第二种情况下,它们都指向同一个对象。 这就是为什么它返回true

阅读关于对象比较,在这个问题上获取更多的信息。

我会build议,parsingJSONstring到一个有效的JavaScript对象,然后做成员级比较。