【问题标题】:Test if an array is empty or contains a certain object with测试数组是否为空或包含某个对象
【发布时间】:2018-08-30 08:42:36
【问题描述】:

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

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 中的工作方式有误,但对我来说,我的问题看起来像是一个或问题。

【问题讨论】:

    标签: javascript testing jestjs


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我还发现这篇文章,结合你写的,很有帮助medium.com/@andrei.pfeiffer/…
    • 是的,如果您发现自己更频繁地测试这种情况,我认为自定义匹配器将是一个很好的解决方案。不过,我想知道您是否正在编写一个测试用例,而您应该编写两个测试用例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2021-04-07
    相关资源
    最近更新 更多