Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

After upgrading to Expo48 Meeting this error: TypeError: Cannot read properties of undefined (reading 'exists')

After upgrading my project from Expo45 to Expo48, I encounter this error when running the test:

TypeError: Cannot read properties of undefined (reading 'exists')
at exists (node_modules/expo-asset/src/PlatformUtils.ts:65:17)  
at asyncGeneratorStep (node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)  
at _next (node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:9)

The unit test itself is quite simple:

  it('Should be able rendered properly', () => {
    render(
      <UserContext.Provider
        value={[initialState, jest.fn()]}
      >
        <UpdatePasswordScreen />
      </UserContext.Provider>,
    );
  });

The UpdatePasswordScreen component is like this:

    <View style={styles.container}>
      <Spinner
        visible={showSpinner}
        textContent={'Loading...'}
        textStyle={{
          color: '#FFFFFF',
        }}
      />
      <CustomInput
        titleStyle={{
          size: 13,
        }}
        titleContainerStyle={{
          marginBottom: 10,
        }}
        containerStyle={{
          marginBottom: 8,
        }}
        placeholder="Enter Password"
        title="Old password"
        value={oldPassword}
        secureTextEntry={!showOldPassword}
        onRenderLeftIcon={() => (
          <Icon
            name={showOldPassword ? 'eye' : 'eye-off'}
            type="feather"
            size={20}
            color="#AFB4B9"
            onPress={() => setShowOldPassword(!showOldPassword)}
          />
        )}
        onChangeText={setOldPassword}
      />
      <View style={styles.confirmButton}>
        <IconButton
          text="Reset Password"
          buttonStyle={{
            height: 52,
            width: 200,
          }}
          onPress={updatePassword}
          disabled={!oldPassword || !newPassword
            || !confirmNewPassword || showPasswordErrorMessage()
            || newPassword !== confirmNewPassword
            || oldPasswordUnchanged
          }
        />
      </View>
    </View>

I just want to render the component but it doesn't work. The unit test run well under Expo45.

Any suggestions will be appreciated!

How to solve this problem?

like image 728
Zachary Zhao Avatar asked Sep 02 '25 10:09

Zachary Zhao


1 Answers

I fixed this error by adding these lines to my jest setup file :

jest.mock("expo-font");
jest.mock("expo-asset");
like image 128
adrienr Avatar answered Sep 04 '25 00:09

adrienr