Javascript 如何使用react本机测试库模拟useEffect异步调用?
我正在尝试使用以下内容测试具有useEffect挂钩的屏幕:Javascript 如何使用react本机测试库模拟useEffect异步调用?,javascript,reactjs,react-native,jestjs,react-native-testing-library,Javascript,Reactjs,React Native,Jestjs,React Native Testing Library,我正在尝试使用以下内容测试具有useEffect挂钩的屏幕: export const SomeScreen: React.FC<Props> = ({}) => { const [isSensorAvailable, setIsSensorAvailable] = useState(false); useEffect(() => { const isSensorAvailableCheck = async () => { try {
export const SomeScreen: React.FC<Props> = ({}) => {
const [isSensorAvailable, setIsSensorAvailable] = useState(false);
useEffect(() => {
const isSensorAvailableCheck = async () => {
try {
await FingerprintScanner.isSensorAvailable();
setIsSensorAvailable(true);
} catch (error) {
console.log(error);
}
};
isSensorAvailableCheck();
}, []);
...
Here goes code that renders View if the sensor is available
...
}
但当我运行这个测试时,它永远不会结束。还尝试使用act(…)
对其进行包装,但也不起作用,错误如下:
无法访问未安装的测试呈现程序上的.root
感谢您的帮助,谢谢 我最终使用了
findByTestId
而不是getByTestId
,现在它运行良好
import {default as FingerprintScannerMock} from 'react-native-fingerprint-scanner';
jest.mock('react-native-fingerprint-scanner');
(FingerprintScannerMock.isSensorAvailable as jest.Mock).mockResolvedValue(true);
const createTestProps = (props: Object) => ({
navigation: {
navigate: jest.fn(),
},
...props,
});
describe('Testing some screen', () => {
test('testing some functionalities', async () => {
let props: any;
props = createTestProps({});
const component = render(
<Provider store={store}>
<RegisterPasswordScreen {...props} />
</Provider>,
);
const {getByText, getByTestId, getAllByTestId} = component;
const container = getByTestId('containerId');
expect(container).toBeTruthy();
});
});
const component = await waitFor(() =>
render(<Provider store={store}>
<RegisterPasswordScreen {...props} />
</Provider>,
);
);