Здесь у меня есть компонент withPermissions HO C, как показано ниже
export function withPermissions<T>(
WrappedComponent: React.ComponentType<T>,
requestedPermissions: RequestedPermissions,
) {
return class WithPermissions extends React.Component<
WithPermissionsProps & T,
WithPermissionsState
> {
readonly state: WithPermissionsState;
constructor(props: WithPermissionsProps & T) {
super(props);
this.state = {
focusSubscription: undefined,
permissions: {},
};
}
readonly checkPermissions = async () => {
const { permissions } = await Permissions.askAsync(...requestedPermissions);
const nextPermissions: RecievedPermissions = Object.entries(permissions).reduce(
(allPermissions, [permissionType, value]) => ({
...allPermissions,
[permissionType]: value.status,
}),
{},
);
this.setState(state => ({ ...state, permissions: nextPermissions }));
};
componentWillMount() {
this.checkPermissions();
}
render() {
const { permissions } = this.state;
return <WrappedComponent permissions={permissions} {...(this.props as T)} />;
}
};
}
Я завернул экран с HO C
export const ScanScreen = withPermissions<ScanScreenProps>(component, [
Permissions.CAMERA,
]);
мой тестовый код выглядит как
.mock("expo-permissions", () => ({
Permissions: {
askAsync: jest.fn(),
},
}));
test("Correct permissions are asked for in scanner screen", async () => {
const { environment } = renderWithPermissions(ScanScreen);
await resolveMostRecentOperation<CompleteScanScreenQuery>(environment);
Permissions.askAsync(Permissions.CAMERA);
});
, когда я пытался с вышеуказанным кодом, я получил следующую ошибку
TypeError: Permissions.askAsync is not a function
, когда я меняю насмешку с выставочных разрешений на выставку, как показано ниже
.mock("expo", () => ({
Permissions: {
askAsync: jest.fn(),
},
}));
const { environment } = renderWithPermissions(ScanScreen);
await resolveMostRecentOperation<CompleteScanScreenQuery>(environment);
Permissions.askAsync(Permissions.CAMERA); //undefined
ошибка пропадет и тест пройден, но результат не определен
, и я попробовал приведенный ниже код, но не могу отобразить BarCodeScanner
test("Correct permissions are asked for in scanner screen", async () => {
const { environment, getByTestId } = renderWithPermissions(ScanScreen);
await resolveMostRecentOperation<CompleteScreenQuery>(environment);
const permissionsSpy = jest.spyOn(Permissions, "askAsync");
Permissions.askAsync(Permissions.CAMERA);
expect(permissionsSpy).toHaveBeenCalledWith(Permissions.CAMERA);
getByTestId("barCodeScanner");
});
ошибка
Unable to find an element with the testID of: barCodeScanner
Я не уверен, как это сделать. Может кто-нибудь, пожалуйста, помогите мне