Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Falha ao criar mock para o AsyncStorage

Olá, resolvi expandir o que foi ensinar no curso e criar mocks para o AsyncStorage, @react-native-async-storage/async-storage, mas começou a dar erros quando faço o mock sem passar direto na função "jest.mock". Alguem sabe me dizer o pq essas coisas acontecem e qual a melhor maneira de fazer?

Vou deixar alguns exemplo abaixo para ficar mais claro:

FUNCIONA

jest.mock('@react-native-async-storage/async-storage', () => ({
  setItem: jest.fn((item, value) => {
    return new Promise((resolve) => {
      mockItems[item] = value;

      setTimeout(() => resolve(value), 100);
    });
  }),
  getItem: jest.fn((item) => {
    return new Promise((resolve) => {
      setTimeout(() => resolve(mockItems[item]), 100);
    });
  }),
}));

NÃO FUNCIONA

...

const mockStorage = {
  setItem: jest.fn((item, value) => {
    return new Promise((resolve) => {
      mockItems[item] = value;

      setTimeout(() => resolve(value), 100);
    });
  }),
  getItem: jest.fn((item) => {
    return new Promise((resolve) => {
      setTimeout(() => resolve(mockItems[item]), 100);
    });
  }),
};

jest.mock('@react-native-async-storage/async-storage', () => mockStorage);

// Erro que aparece no console
TypeError: Cannot read property 'getItem' of undefined
...

jest.mock('@react-native-async-storage/async-storage');

describe('Example', () => {
  it('mockImplementation', async () => {
    AsyncStorage.getItem.mockImplementation(() => mockStorage.getItem([]));

    ...
  });
});

// Erro que aparece no console
[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null.
1 resposta
solução!

A solução que encontrei foi declarar as funções/atributos que vou utilizar direto na declaração do mock, mas definir elas como "jest.fn()", assim consigo alterar caso precise em um teste especifico:

import AsyncStorage from '@react-native-async-storage/async-storage';

jest.mock('@react-native-async-storage/async-storage', () => ({
  setItem: jest.fn(),
  getItem: jest.fn(),
}));
...
describe('Example', () => {
  it('mockImplementation', () => {
    AsyncStorage.getItem.mockImplementation(() => []);
    ...
  });
});
...