【问题标题】:Unit testing AsyncStorage in React Native with Jest使用 Jest 在 React Native 中对 AsyncStorage 进行单元测试
【发布时间】:2020-07-24 04:11:24
【问题描述】:

我正在学习 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

【问题讨论】:

标签: react-native unit-testing jestjs enzyme


【解决方案1】:

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

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

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

【讨论】:

  • 嗨 Marek,我已经使用您提供的解决方案编辑了上述内容,但出现上述错误。此外,我无法更改为“@react-native-community/async-storage”,因为我们的项目正在使用来自 react native 的异步存储。除此之外,还有什么猜测可能出了什么问题?
  • 我了解到您是从 react-native 导入 AsyncStorage?它现在已被弃用,因此如果是这种情况,请考虑添加 @react-native-community/async-storage 包,然后将 jest.mock 调整为我上面提供的内容。否则,这个过去的问题也可以提供帮助:stackoverflow.com/questions/40952566/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多