【发布时间】:2021-05-09 20:26:36
【问题描述】:
我是单元测试的新手,并为我的组件和类编写它们。 我有一种过滤重复数字但具有相同 ID 的方法。 我写了这个方法:
public groupByOrderNumber(
deliveryReceipts: DeliveryReceiptSearch[]
): Map<string, Map<string, DeliveryReceiptItemSearchResult[]>> {
const groupedDeliveryReceipts = new Map<string, Map<string, DeliveryReceiptItemSearchResult[]>>();
for (const receipt of deliveryReceipts) {
const receiptId: string = receipt.id;
groupedDeliveryReceipts.set(receiptId, new Map<string, DeliveryReceiptItemSearchResult[]>());
for (const item of receipt.items) {
const orderNumber = item.orderNumber;
if (groupedDeliveryReceipts.get(receiptId).has(orderNumber)) {
groupedDeliveryReceipts.get(receiptId).get(orderNumber).push(item);
} else {
groupedDeliveryReceipts.get(receiptId).set(orderNumber, [item]);
}
}
}
return groupedDeliveryReceipts;
}
我的测试是这样的:
describe('groupByOrderNumber', () => {
const deliveryReceipts: DeliveryReceiptSearchMock[] = DeliveryReceiptSearchMock.createListOfReceipts();
it('should not contain identical orderNumbers', () => {
const dReceipts: Map<string, Map<string, DeliveryReceiptItemSearchResult[]>> = service.groupByOrderNumber(
deliveryReceipts
);
for (const receipts of deliveryReceipts) {
const receiptId: string = receipts.id;
for (const item of receipts.items) {
const orderNumber = item.orderNumber;
expect(dReceipts.get(receiptId).has(orderNumber)).toIn
expect(dReceipts.get(receipts.id).set(orderNumber, [item])).not.toEqual(dReceipts.get(receipts.id).get(orderNumber));
}
}
});
});
测试将模拟一些数据以用于测试,如开头所示。
我不太确定如何测试 orderNumber 是否是其 receipt.id 独有的。
有没有办法使用一些原生的 jest 方法?
例子:
receipt.id ('9876') -> orderNumber ('123')
receipt.id ('101112') -> orderNumber ('123')
groupByOrderNumber() 基本上就是这样做的。
【问题讨论】:
-
仍在学习 Jest,但您可以尝试从空数组开始,然后检查数组中是否存在订单号。类似于:expect(testArray).not.toContain(orderNumber)。如果没有失败,则将该订单号添加到数组中。
-
是的,我明白你的想法。我希望
orderNumber存在于数组中,但我希望它对于相应的receipt.id是唯一的。就像我有两张收据,orderNumber相同,receipt.id不同。 -
你能在 stackblitz 或类似的东西中重新创建它吗?它使帮助变得更容易,并且可能更详细地说明您当前的测试用例做了什么以及结果与您的预期有何不同
标签: angular typescript unit-testing jestjs