为什么Jest中的rest参数未覆盖branch?

时间:2019-04-26 08:32:38

标签: javascript typescript ecmascript-6 jestjs

我目前正在尝试覆盖100%的功能,但是我正面临一个未被覆盖的分支,它不理解为什么未覆盖它,甚至不知道如何解决和覆盖它。

test coverage result here

它尝试了许多不同的测试,但没有任何改变。如果问题来自我还是Jest,我不是吗?

我的功能

export const removeProductInList = (state: IItems, action: IBasketRemoveProductAction) => {
    const {
        payload: { uuid },
    } = action;
    const { [uuid]: itemToRemove, ...restOfItems } = state;
    return restOfItems;
};

我的测试

product1 = { id: 1 };
product2 = { id: 2 };
mockUuid1 = 'IdTest';
mockUuid2 = 'IdTest2';
mockItem1 = { product: product1, quantity: 1 };
mockItem2 = { product: product2, quantity: 1 };
mockListItems = {
      [mockUuid1]: mockItem1,
      [mockUuid2]: mockItem2,
};

it('should handle PRODUCT__REMOVE', () => {
        expect(removeProductInList({ [mockUuid1]: mockItem1 }, removeProduct(mockUuid1))).toEqual({});

        expect(removeProductInList(mockListItems, removeProduct(mockUuid1))).toEqual({ [mockUuid2]: mockItem2 });

        expect(removeProductInList({}, removeProduct('acac'))).toEqual({});
    });

我希望在我的实际测试中涵盖所有功能。

以防万一,我的玩笑版本是23.4.1

2 个答案:

答案 0 :(得分:1)

尝试通过其他属性测试removeProductList

expect(removeProductInList({ [mockUuid1]: mockItem1, extraProp: 'someValue' }, removeProduct(mockUuid1))).toEqual({});

答案 1 :(得分:0)

您只需在ts-jest的esnext文件中指定目标tsConfig

// jest.config.js

module.exports =  {
 ...
 'ts-jest': {
   ....
   tsConfig: './tsconfig.json'),
},

// tsconfig.json

{
  ...,
  "target": "esnext",
}