Jest 测试从 Promise 返回的 axios 错误。我得到一个 "array"

Jest test axios error returned from a Promise. I get an "array"

我有这个测试:

await waitFor(() => {
            expect(store.getActions()).toMatchObject([{
                type: "TRY_INDEX_ROLES_ITEMS",
            },
            {
                type: "INDEX_ROLES_ITEMS_FAILED",
                error: "Error: Request failed with status code 401"
            }]);
        });

但我进入了控制台:

expect(received).toMatchObject(expected)

    - Expected  - 1
    + Received  + 1

      Array [
        Object {
          "type": "TRY_INDEX_ROLES_ITEMS",
        },
        Object {
    -     "error": "Error: Request failed with status code 401",
    +     "error": [Error: Request failed with status code 401],
          "type": "INDEX_ROLES_ITEMS_FAILED",
        },
      ]

区别在于我真正收到的“数组”符号。

实际上这是我正在测试的操作:

return this.getApi()
                .index(id)
                .then(data => {
                    dispatch({
                        type: `INDEX_ROLES_ITEMS_SUCCEEDED`,
                        data
                    });
                })
                .catch(error => {
                    dispatch({
                        type: `INDEX_ROLES_ITEMS_FAILED`,
                        error,
                    });
                })

我从以下位置得到错误:

axiosInstance.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        return Promise.reject(error);
    }
);

我不想用 error.toString() 更改错误 return(它可以与 error.toString() 一起使用,我之前刚刚测试过),我想要 return 来自我的 Axios 的错误并解决该测试。

谢谢

不确定这是否是您要的,但您是否尝试过仅使用 error.message?

return Promise.reject(error.message);

由于您使用的是 toMatchObject,您可以这样做。

expect(store.getActions()).toMatchObject([
  {
    type: 'TRY_INDEX_ROLES_ITEMS',
  },
  {
    type: 'INDEX_ROLES_ITEMS_FAILED',
    error: { message: 'Request failed with status code 401' },
  },
]);

或者

expect(store.getActions()).toMatchObject([
  {
    type: 'TRY_INDEX_ROLES_ITEMS',
  },
  {
    type: 'INDEX_ROLES_ITEMS_FAILED',
    error: expect.objectContaining({
      message: 'Request failed with status code 401',
    }),
  },
]);