使用Jest在React Native中对AsyncStorage进行单元测试

时间:2020-04-11 12:24:59

标签: react-native unit-testing jestjs enzyme

我正在学习React Native和Jest测试。

我有一段代码,当单击按钮时,我将一些值存储在AsyncStorage中。单击按钮后,我将调用以下方法。

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

现在,我想对上述方法进行单元测试,以查看我的异步存储是否工作正常。

我能够创建快照并测试该方法的其余功能,但不能测试这一功能。但是我不太熟悉该怎么做?

第二次编辑------

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 :(得分:0)

在测试文件中,您可以模拟任何外部模块,然后检查是否使用正确的参数调用了该模块,如下所示:

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

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