【发布时间】:2019-12-24 06:35:21
【问题描述】:
我试图断言我的自定义挂钩在挂载时会从 API 返回一些数据。
代码如下:
import * as React from 'react';
import { findByStatus } from '../../services/AssignmentService';
import Assignment from '../../models/Assignment';
import AssignmentList from './AssignmentList';
type AssignmentListApiHookTuple = [Assignment[], React.Dispatch<React.SetStateAction<string>>];
export const useAssignmentListApi = (initialStatus: string = ''): AssignmentListApiHookTuple => {
const [assignments, setAssignments] = React.useState<Assignment[]>([]);
const [status, setStatus] = React.useState<string>(initialStatus);
React.useEffect(
() => {
findByStatus(status).then((res) => { setAssignments(res); });
},
[status],
);
return [
assignments,
setStatus,
];
};
const AssignmentListContainer = (props: { status: string }) => {
const [assignments, setStatus] = useAssignmentListApi(props.status);
return (<AssignmentList assignments={assignments} />);
};
export default AssignmentListContainer;
测试看起来像这样:
test('useAssignmentApi correctly sets the state', () => {
const mockReturnValue = [{some: 'value'}];
(AssignmentService.findByStatus as jest.Mock<any, any>)
.mockResolvedValue(mockReturnValue);
// Setup a dummy component to pass the custom hook
const TestHook = (props: { callback: Function }) => {
const { callback } = props;
callback();
return <div />;
};
const testHook = (callback: Function) => mount(<TestHook callback={callback}/>);
const component = testHook(() => {
const [assignments, setAssignment] = useAssignmentListApi('new');
setTimeout(() => { expect(assignments).toEqual(mockReturnValue); } , 10);
});
});
此测试适用于 setTimeout() 中的任何延迟,但如果我不在那里放入 setTimeout,总是会失败?我究竟做错了什么?
【问题讨论】:
-
删除
async关键字 -
这没有帮助@codekaizer
标签: reactjs jestjs enzyme react-hooks