在 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);
的直接指令
但是,正在导出的文件有 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
中解释
- 在你的 Jest 配置中(可能在 package.json 中)添加设置文件位置:
"jest": {
"setupFiles": ["./path/to/jestSetupFile.js"]
}
- 在您的设置文件中,设置异步存储模拟:
import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock';
jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage);
我正在测试依赖于 @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);
的直接指令
但是,正在导出的文件有 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
中解释- 在你的 Jest 配置中(可能在 package.json 中)添加设置文件位置:
"jest": {
"setupFiles": ["./path/to/jestSetupFile.js"]
}
- 在您的设置文件中,设置异步存储模拟:
import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock';
jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage);