期待深度相等的两个对象之一

Expect one of two object with deep equal

使用 Chai expect,我正在尝试将 API 响应与预期响应进行比较。 API 的预期响应随时间变化,可以是两种可能的静态 JSON 之一。

在 Chai 中有什么方法可以期待这两个 JSON 之一?

我知道它在单个值下工作得很好:expect(actualResponse).to.deep.equal(expectedJson);

但我想要这样的东西:expect(actualResponse).to.deep.equal(expectedJson1, expectedJson2);

您可以使用 chai.satisfy(matcher[, msg]) 方法。

例如

import { expect } from 'chai';
import _ from 'lodash';

describe('63811326', () => {
  it('should pass', () => {
    function genResponse() {
      const successResponse = {
        data: {},
        success: true,
      };
      const failResponse = {
        success: false,
        errorMessage: 'API error',
      };
      return Math.random() > 0.5 ? failResponse : successResponse;
    }

    const expectedJson1 = { data: {}, success: true };
    const expectedJson2 = { success: false, errorMessage: 'API error' };
    expect(genResponse()).to.satisfy((actualResponse) => {
      console.log(actualResponse);
      return _.isEqual(actualResponse, expectedJson1) || _.isEqual(actualResponse, expectedJson2);
    });
  });
});

第一次执行的单元测试结果:

  63811326
{ success: false, errorMessage: 'API error' }
    ✓ should pass


  1 passing (26ms)

第二次执行的单元测试结果:

  63811326
{ data: {}, success: true }
    ✓ should pass


  1 passing (31ms)