jest mock useEffect
时间: 2023-02-12 21:33:23 浏览: 352
Jest 中模拟 useEffect 的方法如下:
1. 使用 jest.spyOn() 函数替代 useEffect 的回调函数。
2. 使用 jest.runOnlyPendingTimers() 函数模拟 React 组件的生命周期。
3. 使用 act() 函数包裹你的测试代码,以确保测试的可预测性。
代码示例:
```
import React, { useEffect } from 'react';
import { act, render, unmountComponentAtNode } from '@testing-library/react';
import { useFetch } from './useFetch';
jest.mock('./useFetch', () => {
return {
useFetch: jest.fn().mockImplementation(() => ({
data: null,
loading: true,
error: null,
})),
};
});
describe('useFetch', () => {
let container: any;
beforeEach(() => {
container = document.createElement('div');
document.body.appendChild(container);
});
afterEach(() => {
unmountComponentAtNode(container);
container.remove();
});
it('should call useFetch hook', () => {
const spy = jest.spyOn(React, 'useEffect');
const { useFetch } = require('./useFetch');
act(() => {
render(<App />, container);
});
expect(spy).toHaveBeenCalled();
spy.mockRestore();
});
});
```
阅读全文