gpt4 book ai didi

reactjs - 如何使用 Jest 测试异步存储?

转载 作者:行者123 更新时间:2023-12-03 13:06:02 25 4
gpt4 key购买 nike

我正在使用 React Native 构建一个应用程序。我想尽量减少与数据库通信的频率,因此我大量使用 AsyncStorage。不过,DB 和 AsyncStorage 之间的转换存在很多错误。因此,我想通过对其运行自动化测试来确保 AsyncStorage 拥有我认为它拥有的数据。令人惊讶的是,我没有在网上找到任何有关如何执行此操作的信息。我自己尝试做这件事并没有成功。

使用 Jest :

it("can read asyncstorage", () => {
return AsyncStorage.getItem('foo').then(foo => {
expect(foo).not.toBe("");
}); });

此方法失败并出现错误:

TypeError: RCTAsyncStorage.multiGet is not a function

删除返回将导致它立即运行而不等待值并错误地通过测试。

当我尝试使用await关键字测试它时,我遇到了完全相同的错误:

it('can read asyncstorage', async () => {
this.foo = "";
await AsyncStorage.getItem('foo').then(foo => {
this.foo = foo;
});
expect(foo).not.toBe(""); });

关于如何成功针对 AsyncStorage 中的值运行断言有什么建议吗?我更愿意继续使用 Jest,但如果它只能通过一些替代测试库来完成,我对此持开放态度。

最佳答案

致所有在 > 2019 年看到此问题的人:

Nov 2020 , AsyncStorage 已重命名回 @react-native-async-storage/async-storage" ,如果您从 react-native 导入它,这会导致出现此警告:

Warning: Async Storage has been extracted from react-native core and will be removed in a future release.

新模块包含自己的模拟,因此您不必再担心编写自己的模拟。

Per the project's documentation ,您可以通过两种不同的方式进行设置:

带有模拟目录

  • 在项目根目录中,创建一个 __mocks__/@react-native-community 目录。
  • 在该文件夹中,创建 async-storage.js 文件。
  • 在该文件内,导出异步存储模拟。
    export default from '@react-native-async-storage/async-storage/jest/async-storage-mock'

Jest 应该在所有测试中默认模拟 AsyncStorage。如果没有,请尝试在测试文件顶部调用 jest.mock(@react-native-async-storage/async-storage)

使用 Jest 安装文件

  • 在您的 Jest 配置中(可能在 package.jsonjest.config.js 中)添加安装文件的位置:
    "jest": {
    "setupFiles": ["./path/to/jestSetupFile.js"]
    }
  • 在您的设置文件中,设置 AsyncStorage 模拟:
    import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock';

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

如果您使用 TypeScript,使用第二个选项(Jest 安装文件)会更容易,因为使用第一个选项(mocks 目录)它不会关联 @types/自动使用模拟进行react-native-community__async-storage

关于reactjs - 如何使用 Jest 测试异步存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40952566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com