次のように useEffect フックを持つ画面をテストしようとしています。
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
...
}
そして、私は次のテストを試みています:
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();
});
});
しかし、次のエラーのためにsetIsSensorIsAvailableが値をtrueに設定しないため、このコンテナーは決して見つかりません。
An update to SomeScreen inside a test was not wrapped in act(...).
私はこのようにすべてを試しました:
const component = await waitFor(() =>
render(<Provider store={store}>
<RegisterPasswordScreen {...props} />
</Provider>,
);
);
しかし、このテストを実行すると、決して終了しません。でラップしようとしましact(...)
たが、どちらも機能しません。エラーは次のとおりです
Can't access .root on unmounted test renderer
。
どんな助けでも感謝します、ありがとう!