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',
}),
},
]);
我有这个测试:
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',
}),
},
]);