gpt4 book ai didi

unit-testing - 通过 jest mock 测试 catch block

转载 作者:行者123 更新时间:2023-12-03 18:46:50 24 4
gpt4 key购买 nike

我正在尝试通过玩笑测试异步 redux 操作的“catch”块,但是在模拟中抛出一个 catch 会导致整个测试失败。

我的操作如下:

export function loginUser(username, password) {
return async dispatch => {
dispatch({type: UPDATE_IN_PROGRESS});
try {
let response = await MyRequest.postAsync(
'/login', {username: username, password: password}
);
dispatch({
type: USER_AUTHENTICATED,
username: response.username,
token: response.token,
role: response.role,
id: response.id
});
} catch (error) {
dispatch({type: USER_SIGNED_OUT});
throw error;
} finally {
dispatch({type: UPDATE_COMPLETE});
}
};
}

该测试试图模拟 'MyRequest.postAsync' 以抛出错误并因此触发 catch 块,但该测试只是以“失败”消息退出
it('calls expected actions when failed log in', async() => {
MyRequest.postAsync = jest.fn(() => {
throw 'error';
});

let expectedActions = [
{type: UPDATE_IN_PROGRESS},
{type: USER_SIGNED_OUT},
{type: UPDATE_COMPLETE}
];

await store.dispatch(userActions.loginUser('foo', 'bar'));
expect(store.getActions()).toEqual(expectedActions);
});

有没有办法通过玩笑模拟函数(或任何其他方式)触发 catch 块在我的测试中执行?无法测试大量代码会很烦人(因为我所有的请求都以相同的方式工作)。

在此先感谢您的帮助。

最佳答案

我不知道它是否仍然相关,但你可以这样做:

it('tests error with async/await', async () => {
expect.assertions(1);
try {
await store.dispatch(userActions.loginUser('foo', 'bar'));
} catch (e) {
expect(e).toEqual({
error: 'error',
});
}
});

这是一个关于错误处理的 documentation

关于unit-testing - 通过 jest mock 测试 catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42439532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com