在我的react native项目中,我最近安装了节点模块react-native-async-storage,因为我收到了关于'react-native'中的native包被弃用并移出到单个模块的警告。
安装@react-native-community/async-storage
后,我的jest测试失败。
第一个,后面是error: unexpected token at position 0
文件中:
persistence.js
import AsyncStorage from '@react-native-community/async-storage';
storeData = async ({ key, value }) => {
try {
await AsyncStorage.setItem(key, value);
} catch (error) {
// Error saving data
}
}
retrieveData = async (key) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
// Our data is fetched successfully
return value;
}
} catch (error) {
// Error retrieving data
}
}
module.exports = {
storeData,
retrieveData
}
所以我假设这与某些babel配置有关,因为我上次从@react-native-community安装软件包时遇到了类似的情况
因此,我在package.json中的transformIgnorePatterns
中添加了以下内容:
"jest": {
"preset": "react-native",
"transformIgnorePatterns": [
"node_modules/(?!react-native|@react-native-community/async-storage|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|tcomb-form-native)"
]
}
但现在我得到一个新的错误。@RNCommunity/AsyncStorage: NativeModule.RCTAsyncStorage is null.
我粘贴屏幕截图来显示我的项目目录,这样你就可以了解哪些配置文件可以用来搞乱。x1c 0d1x
正如我所看到的,大多数相关的主题都是关于模拟asyncStorage函数的,我试过这样做,没有任何运气。我在我唯一的测试文件中添加了以下内容:
import MockAsyncStorage from 'mock-async-storage';
beforeAll(() => {
const mockImpl = new MockAsyncStorage()
jest.mock('AsyncStorage', () => mockImpl)
snapshot = renderer.create(<App />);
})
afterAll(() => {
jest.unmock('AsyncStorage')
});
还是没有雪茄。我试过添加一个setupFilesAfterEnv.js
与配置作为其他答案建议,也没有做的伎俩。
7条答案
按热度按时间w9apscun1#
async-storage有published instructions关于如何解决这个问题。
下面是一个简短的版本:
1.在项目根目录下,创建**mocks/@react-native-community目录。
1.在该文件夹中,创建一个async-storage.js**文件。
1.将以下内容复制粘贴到该文件中:
1.好好享受吧!
我希望它能帮助其他人。
tyu7yeag2#
我找到了一种嘲笑
@react-native-community/async-storage
的方法在我项目根目录下(与
__test__
目录相同),我创建了一个目录结构,如下所示:__mocks__/@react-native-community/async-storage/index.js
在index.js中,我模仿了以下函数:
在我的测试文件中,我添加了以下内容:
dir结构截图:
这一招奏效了。我在这里找到了灵感:https://github.com/react-native-community/react-native-async-storage/issues/39
iugsix8n3#
您需要将这段代码添加到setupTestFrameworkScriptFile中
xytpbqjk4#
您可以将其添加到测试文件中。
举个例子
gtlvzcf85#
谢谢@Krizzo
另一个基于@Rasmus普尔斯的Jest版本,但具有jest函数-将添加到您的jest mocks文件中。
n1bvdmb66#
看看documentation by the team,(来自Francois Nadeau提供的答案)我能够将'mocking with jest setup.js file'选项更改为下面的行,并解决了完全相同的问题。
请注意,路径已更改。
qacovj5a7#
我不得不修改published solution:
1.在项目根目录中,创建
__mocks__/@react-native-async-storage
目录。1.在该文件夹中,创建
async-storage.js
文件。1.在该文件中,粘贴以下内容:
注意:我在使用原始解决方案时遇到了一个
ts1005
编译错误,抱怨缺少分号(即export default from '@
...)。我使用的是Typescript 4.9,所以这可能会给我的原始解决方案带来问题。