2

次のように 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

どんな助けでも感謝します、ありがとう!

4

2 に答える 2