在 Jest 上模拟 react-native-async-storage

Mocking react-native-async-storage on Jest

我正在测试依赖于 @react-native-community/async-storage 的函数,因此显然我的测试必须模拟该库。

所以我在 jestSetupFile.js:

中执行此操作
import mockAsyncStorage from '@react-native-community/async-storage/jest/async-storage-mock';
jest.mock('@react-native-community/async-storage', () => mockAsyncStorage);

这是来自https://github.com/react-native-community/react-native-async-storage/blob/master/docs/Jest-integration.md

的直接指令

但是,正在导出的文件有 type 个关键字,我的 JavaScript 环境无法解析这些关键字:

  ● Test suite failed to run

    /Users/someuser/myprojects/myproject/node_modules/@react-native-community/async-storage/jest/async-storage-mock.js:6
    type KeysType = Array<string>;
         ^^^^^^^^

    SyntaxError: Unexpected identifier

果然,当我在该路径检查 async-storage-mock.js 文件时,它包含 type 关键字,我认为这是此问题的根本原因。

我在这里做错了什么?

我的解决方案是切换到 mock-async-storage

我的jestSetupFile.js:

import MockAsyncStorage from 'mock-async-storage';
const mockImpl = new MockAsyncStorage()
jest.mock('@react-native-community/async-storage', () => mockImpl);

^^ 上面的模拟代码在我的测试脚本开始时不起作用,尽管我的其他模拟代码通常在那里工作。这仅在添加到我在 package.json:

中定义的 jestSetupFile.js 时有效
"jest:"  {
   "setupFiles": [
      "./jestSetupFile.js"
    ]
}

到 2022 年,您可以使用社区包 @react-native-community/async-storage recommended by React-Native official documentation

一切都在他们的doc

中解释
  1. 在你的 Jest 配置中(可能在 package.json 中)添加设置文件位置:
"jest": {
  "setupFiles": ["./path/to/jestSetupFile.js"]
}
  1. 在您的设置文件中,设置异步存储模拟:
import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock';
    
jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage);