期待深度相等的两个对象之一
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)
使用 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)