在节点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);
尽pipeobj1
和obj2
是相同的,但它们并不相同。 所以,它会返回false
。 但在第二种情况下,它们都指向同一个对象。 这就是为什么它返回true
。
阅读关于对象比较,在这个问题上获取更多的信息。
我会build议,parsingJSONstring到一个有效的JavaScript对象,然后做成员级比较。