[英]Mocha/Chai: how to test Mongoose Schema Arrays of objects
目前用Mongoose保存數組類型,我沒有通過測試
let resourcePublic = {
name: 'RS123',
description: 'RS123Description',
owner: newUser.id,
permissions: [{ level: 'group', level_id: newGroup.id, canWrite: true }],
private: false
};
it('should create a new public resource', (done) => {
request(app)
.post('/api/v1/resources')
.send(resourcePublic)
.expect(httpStatus.OK)
.then((res) => {
...
expect(res.body.permissions).to.have.same.members(resourcePublic.permissions);
...
resourcePublic = res.body;
done();
})
.catch(done);
});
ACTUAL Array在保存文檔之后插入了object_id字段。
ACTUAL
res.body.permissions: [
{ level: 'group',
level_id: '58f4b9c7110e5e7abd4f0425',
_id: '58f4b9cb110e5e7abd4f042d',
canWrite: true }
]
EXPECTED
resourcePublic.permissions: [
{ level: 'group',
level_id: '58f4b9c7110e5e7abd4f0425',
canWrite: true }
]
有什么辦法可以通過測試? 感謝您的反饋
首先,您需要包含.deep
因為您正在比較對象數組(如果不包含.deep
,Chai只會使用===
比較這兩個對象,這將永遠不會成立)。
但是即使如此,我認為您也無法讓Chai忽略多余的_id
。 相反,我可能會將測試分為兩部分:首先檢查res.body.permissions
的項目res.body.permissions
具有_id
屬性,然后將其刪除,最后對resourcePublic
進行深入比較。
所以:
res.body.permissions.permissions.forEach(item => {
expect(item).to.have.property('_id');
delete item._id;
});
expect(res.body.permissions).to.deep.have.same.members(resourcePublic.permissions);
順便說一句,由於您使用的是基於承諾的代碼,因此建議您利用Mocha 內置的promise支持 。 您的測試將需要(少量)更少的代碼,並且可以幫助您避免在混合使用回調和Promise時出現某些問題:
it('should create a new public resource', () => {
return request(app)
.post('/api/v1/resources')
.send(resourcePublic)
.expect(httpStatus.OK)
.then((res) => {
...
// assertions here
...
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.