Как проверить выставочные разрешения был вызван с разрешениями камеры - PullRequest
0 голосов
/ 23 января 2020

Здесь у меня есть компонент 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

Я не уверен, как это сделать. Может кто-нибудь, пожалуйста, помогите мне

...