【发布时间】:2021-02-17 19:52:02
【问题描述】:
我复制了一个示例来了解对 reactjs 的 Mock-async-storage 的测试。欢迎任何有关不同测试方法的建议。我试图从这个堆栈溢出页面复制用例:How to test Async Storage with Jest?,但我不知道它如何适合我的示例案例。所以我尝试了下面的 npm 模块https://github.com/devmetal/mock-async-storage,但这也没有帮助。
用 Example.test.js 编写的代码
import AsyncStorage from '@react-native-community/async-storage';
beforeEach(() => {
AsyncStorage.clear();
// console.log(`After the data is being reset :`)
// console.log(AsyncStorage)
});
it('can read asyncstorage', async () => {
await AsyncStorage.setItem('username', 'testUser')
let username = await AsyncStorage.getItem('username')
// console.log(`After the data is being set :`)
// console.log(AsyncStorage)
expect(username).toBe('testUser')
});
jest.config.js 文件中的代码:
module.exports = {
setupFilesAfterEnv: [
'./setup-tests.js',
],
};
setup-tests.js 中的代码
import MockAsyncStorage from 'mock-async-storage';
const mockImpl = new MockAsyncStorage();
jest.mock('@react-native-community/async-storage', () => mockImpl);
在根目录中创建了 mocks 文件夹,然后在其中创建了 @react-native-community 文件夹。然后使用以下代码在 async-storage.js 文件中创建:
export default from '@react-native-community/async-storage/jest/async-storage-mock'
我正在使用 jest-expo 进行测试。
上述测试用例的输出是:
【问题讨论】:
-
尚不清楚您尝试使用 Example.test.js 实现什么(没有测试)。
jest.mock('AsyncStorage', () => mockImpl)失败,因为没有名为AsyncStorage的模块。 -
我想模拟 Asyncstorage。我正在尝试实现类似于 hello world 项目的东西来模拟 Asyncstorage。我能做些什么来摆脱这个错误。请问我应该添加哪些额外的代码行。提前致谢。
-
模拟你用来导入它的同一个模块。如果是
react-native,则模拟react-native。 -
从
@react-native-community/async-storage导入AsyncStorage。但是测试用例仍然抛出同样的错误。这是一个反应原生应用程序。我的最终意图是我应该从 Asynstorage 模拟中获取应用程序的用户名属性。 -
它抛出了同样的错误,因为你模拟了错误且不存在的模块。你需要模拟
@react-native-community/async-storage。你试过了吗?
标签: javascript reactjs react-native jestjs asyncstorage