首页 > 解决方案 > 如何用 Chai 断言对象数组中的类型?

问题描述

我有以下上下文:

const data = [
  { 
    id: 1,
    name: 'thenamefoo',
    modified: new Date() // random date
  },
  {
    id: 2,
    name: 'namebar',
    modified: new Date() // random date
  },
  ...
];

expect(data)...

我想断言我的数据将始终是一个数组,其中包含具有固定键(和类型)的对象。

例如,我想要类似的东西

expect(data)
.to.be.an('array')
.that.all.have.types.like({
  id: Number,
  name: String,
  modified: Date
});

可能吗?如何?任何库?

标签: javascriptunit-testingchaiassert

解决方案


在我看来,您应该专注于验证数据,而不是玩弄笨拙的断言 DSL。通过简单的真/假检查,您所需要的只是谦虚assert

test('my data is valid', () => {
  data.forEach(({id, name, modified}) => {
    assert(typeof id === 'number', `${id} is not a number`);
    assert(typeof name === 'string', `${name} is not a string`);
    assert(modified instanceof Date, `${modified} is not a date`);
  });
});

走得更远

如果您需要检查其他内容,这当然没有多大帮助:

  1. 数组不为空
  2. 每个对象都有id,namemodifiedas 属性。不多不少
  3. id是一个正整数
  4. name不是空字符串
  5. ...

对于更细粒度的控制,您绝对应该查看


推荐阅读