【发布时间】:2021-05-05 01:54:36
【问题描述】:
我正在尝试测试是否调用了 navigate 函数。我开玩笑地嘲笑了这个组件,但是由于 async / promise 函数,它没有及时调用该函数进行测试
组件
import React, { useEffect, useState } from 'react';
...
import { Dialog } from '../../../../common/components/Dialog';
const Component = () => {
...
const handleSave= async (value) => {
const { id } = await newRecord(value);
navigate(APP_ROUTES.SOMELOCATION(id));
};
return (
<button onClick={() => handleSave(someValue)} />
);
};
测试
import { navigate } form '@reach/router';
jest.mock('@reach/router');
it('should call navigate when button is clicked', () => {
wrapper.find('button').simulate('click');
expect(navigate).toHaveBeenCalled();
});
但是,如果您这样做,它确实有效:
setTimeout(() => { expect(navigate).toHaveBeenCalled() }, 100)
【问题讨论】:
-
navigate定义在哪里? -
在第 1 行:导入 { navigate } form '@reach/router';
标签: javascript reactjs jestjs