测试数组是否为空或包含某个对象

时间:2018-08-29 15:05:38

标签: javascript testing jestjs

我想测试一个数组是否为空或是否包含某种结构的对象。用伪代码可能是这样的:

expect([])
  .toHaveLength(0)
  .or
  .arrayContaining(
    expect.toMatchObject(
     { foo: expect.any(String) }
    )
  ) => true

expect([{foo: 'bar'}])
  .toHaveLength(0)
  .or
  .arrayContaining(
    expect.toMatchObject(
     { foo: expect.any(String) }
    )
  ) => true

expect([1])
  .toHaveLength(0)
  .or
  .arrayContaining(
    expect.toMatchObject(
      { foo: expect.any(String) }
    )
  ) => false

也许我在Jest的工作方式上弄错了,但是对我来说,我的问题看起来像是一个问题。

1 个答案:

答案 0 :(得分:1)

封装逻辑或在您的测试套件中的最佳方法是只在测试本身内部排除特殊情况。例如:

it('has an array of objects', () => {
  if (arr.length > 0) {
    expect(arr).toBe(expect.arrayContaining(expect.toMatchObject({ foo: expect.any(String) })));
  }
});

但是,我认为对单元测试更友好的方法是将您的疑虑分开。一种测试是何时存在空数组,另一种是何时将foo属性设置为'bar',等等。