reactjs - 使用 Context 和 useEffect 在 React 应用程序中编写异步代码的集成测试
问题描述
因此,在 useEffect 中,我从 API 获取对象,然后将响应数据分派到 Context reducer,然后更新状态。它看起来像这样:
export const fetchItem = (id) => request({url: `/items/${id}`, method: 'get'});
...
const {dispatch, singleItem} = useProvider();
useEffect(() => {
const id = getItemIdFromUrl(props);
fetchItem(id).then((response) => {
dispatch(action(response.data.data));
});
}, [props, dispatch]);
我想为此编写一个很好的集成测试。我正在使用带有 Jest 的 react-testing-library。我试图模拟 fetchItem 函数的返回值,然后检查是否一切都正确呈现但不断收到此警告:
act(() => {
/* fire events that update state */
});
/* assert on the output */
有机会正确地做到这一点吗?
这是请求方法的样子:
import axios from 'axios';
import humps from 'humps';
import {getItem} from './localStorage';
const api = axios.create({
baseURL: process.env.REACT_APP_API_URL,
});
api.interceptors.response.use(
(response) => humps.camelizeKeys(response),
(error) => Promise.reject(error.response),
);
api.interceptors.request.use(
(request) => {
request.data = humps.decamelizeKeys(request.data);
return request;
},
(error) => Promise.reject(error.request),
);
export default function request({url, method, headers = {}, data}) {
try {
const token = getItem('token');
headers.Authorization = token;
return api({method, url, headers, data});
} catch (error) {
if (error.status === 500) {
console.log('HANDLE ERROR: ', error);
}
throw error;
}
}
解决方案
推荐阅读
- node.js - 如何从文件 Node JS 中读取特定的块?
- python - 通过 Python 脚本创建 Jira 问题:组件、到期日期和修复版本字段的问题已编辑
- reactjs - 如何解决昂贵的自定义挂钩?
- android - 是否可以在 android studio 中使用 python 进行编码?
- ios - 从 URL 到 .scn 文件的 SCNReferenceNode 在文件旁边找不到纹理
- kubernetes - 使用 Google IAM 服务帐户对 Kubectl 进行身份验证
- regex - 正则表达式提取多个匹配字符串
- javascript - 与默认值完全相同的 localeCompare 是否与 string < string
- selectors-api - 使用 querySelector 选择“文本”节点
- javascript - 失败的道具类型:您在没有 `onChange` 处理程序的情况下向表单字段提供了 `checked` 道具