我有以下来自响应的对象数组:
const baseInput = [{
PaymentRequirementsDetail:
{ dateDue: '12/02/2019',
outstandingMinimum: { Money: { amount: '5.20', code: 'GBP' } },
overlimit: { Money: { amount: '345.20', code: 'GBP' } },
arrears: { Money: { amount: '345.20', code: 'GBP' } } }
},
{ Account: {},
AccountId: '00000012345',
CardBrand: 'SOMEBRAND',
isAccountElibible: false,
Customer:
{ salutation: 'Mr',
givenName: 'James',
familyName: 'Jamesy',
suffix: 'Dr' },
Delinquency: { monthsInArrears: 0, isOverlimit: true } }]
然后我用一堆函数转换响应,并返回上面的友好格式化版本。
const baseOutput = transform(baseInput);
返回:
{ name: 'Mr James Jamesy, Dr',
cardBrand: 'SOMEBRAND',
isAccountElibible: false,
delinquency: { monthsInArrears: 0, isOverlimit: true },
dateDue: '12/02/2019',
outstandingMinimumAmount: 'GBP, 5.20',
overlimitAmount: 'GBP, 345.20',
arrearsAmount: 'GBP, 345.20' }
我现在想测试它并生成一些快照。
我可以将上面的代码复制/粘贴到我的测试用例中并更改值,因为我做的断言工作正常。像这样;
test('should omit suffix if it is undefined', () => {
const input = [{
PaymentRequirementsDetail:
{ dateDue: '12/02/2019',
outstandingMinimum: { Money: { amount: '5.20', code: 'GBP' } },
overlimit: { Money: { amount: '345.20', code: 'GBP' } },
arrears: { Money: { amount: '345.20', code: 'GBP' } } }
},
{ Account: {},
AccountId: '00000012345',
CardBrand: 'SOMEBRAND',
isAccountElibible: true,
Customer:
{ salutation: 'Mr',
givenName: 'James',
familyName: 'Jamesy' },
Delinquency: { monthsInArrears: 0, isOverlimit: true } }];
const output = transform(input);
expect(baseOutput).toMatchDiffSnapshot(output);
});
这将根据我的要求生成我的快照,我将能够看到带有后缀的版本和没有清楚版本的版本之间的区别。
但是我相信使用对象扩展运算符有一种更简洁的方法。而不是所有上述代码,我应该留下;
const input = [{
...baseInput,
Customer:
{ salutation: 'Mr',
givenName: 'James',
familyName: 'Jamesy'
}
}];
然而,我无法以某种方式利用传播运算符,以便我能够实现这一点。任何人都可以看到我的错误在哪里?
你的baseInput
是一个有两个项目的数组。 spread运算符适用于数组或对象,您在此处所做的是将数组扩展到目标对象中。
如果您的模型没有改变,您可以简单地将索引对象传播到目标中,如下所示:
const input = [{
...baseInput[0]
},{
...baseInput[1],
Customer:
{ salutation: 'Mr',
givenName: 'James',
familyName: 'Jamesy'
}
}];