Модульное тестирование AsyncStorage в React Native с помощью Jest - PullRequest
0 голосов
/ 11 апреля 2020

Я изучаю тестирование React Native и Jest.

У меня есть фрагмент кода, где я сохраняю некоторое значение в AsyncStorage при нажатии кнопки. Когда кнопка нажата, я вызываю следующий метод.

saveState = () => {
    AsyncStorage.setItem('saveState', 'button clicked');      
}

Теперь я хотел бы провести модульное тестирование вышеуказанного метода, чтобы проверить, нормально ли работает мое хранилище Asyn c.

Мне удалось создать снимок, а также протестировать оставшиеся функциональные возможности метода, но не этот. Но я не совсем знаком с тем, как это сделать?

2-е редактирование ------

jest.mock('react-native', () => ({
    setItem: jest.fn()
}));


describe('<MyComponent/>', () => {
  let tnCScreen
  let props
  let instance

  beforeEach(() => {
    tnCScreen = shallow(<MyComponent {...props} />)
    instance = tnCScreen.instance()
  })

  test('test saveState method is called', () => {
    expect(instance.saveState()).toBeCalled
    expect(AsyncStorage.setItem).toBeCalledWith('saveState', 'button clicked');
  })

})

Когда я пытаюсь описать выше, я получаю ошибку ниже

expect(received).toBeCalledWith(...expected)
Matcher error: received value must be a mock or spy function
Received has value: undefined

1 Ответ

0 голосов
/ 11 апреля 2020

В своем тестовом файле вы можете смоделировать любой внешний модуль, а затем проверить, что он был вызван с правильными аргументами, например:

jest.mock('@react-native-community/async-storage', () => ({
  setItem: jest.fn(),
}));

// in your test:
expect(AsyncStorage.setItem).toBeCalledWith('saveState', 'button clicked');

...