簡體   English   中英

Mocha / Chai:如何測試對象的貓鼬模式數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM