2016-07-04 44 views
0

我得到如下结果由摩卡失败消息:无法获取对象等于

Uncaught AssertionError: expected Object { name: 'John Doe' } to be Object { name: 'John Doe' } 
+ expected - actual 

这里是我的测试代码:

describe("A user gets registered", function() { 
    it('should create a SINGLE user on /api/register POST', function (done) { 
     //calling REGISTER api 
     server 
       .post('/api/register') 
       .send({ 
        name: "John Doe", 
        username: "john", 
        password: "open" 
       }) 
       .expect("Content-type", /json/) 
       .expect(200) 
       .end(function (err, res) { 
        var data = { 
         "name": "John Doe" 
        }; 
        res.status.should.equal(200); 
        res.body.should.equal(data); 
        done(); 
       }); 
    }); 
}); 

这是我的实际代码:

router.post('/', function (req, res) { 
    var data = {name: 'John Doe'}; 
    res.status(200).json(data); 
}); 

module.exports = router; 

但是,我不应该从摩卡得到一个失败的消息,因为两个对象都是一样的。但不知何故,他们并非如此,我真的不知道我做错了什么。

我已经检查了两个对象的间距,所以不应该如此。

+1

尝试'deepEqual'? http://stackoverflow.com/questions/13225274/the-difference-between-assert-equal-and-assert-deepequal-in-javascript-testing-w在JavaScript'({} === {})'返回 – evolutionxbox

+1

''''' 'false'意味着没有2个对象可以直接比较,但是它们的关键值对可以进行比较。 –

回答

1

2的对象可以是不一样的,即使他们的数据是一样的,因为它们是存储在内存中的2个不同的enitities

var data = { 
name: 'piyush'}; 

var data1 = { 
name: 'piyush' 
} 

数据== DATA1 //假

0

如果两个对象都有自己的键以相同的顺序/具有相同的结构,您可以使用JSON.stringify然后比较字符串。这只适用于所有键都是原始值的情况,但如果有另一个对象作为键之一,则需要更复杂的东西。