Its a mock of react-native AsyncStorage for jest tests
npm install mock-async-storageIts a mock of react-native AsyncStorage for jest tests
From 2.9.x version, added esmodules support.
I suggest to use this library with setupFilesAfterEnv configuration. Its more stable and during my tests its working as expected.
npm install --save mock-async-storageimport MockAsyncStorage from 'mock-async-storage'``JavaScript`
// jest.config.js
module.exports = {
setupFilesAfterEnv: [
'
],
};
`JavaScript
// setup-tests.js
import MockAsyncStorage from 'mock-async-storage';
const mockImpl = new MockAsyncStorage();
jest.mock('@react-native-community/async-storage', () => mockImpl);
`
`JavaScript
import MockAsyncStorage from "mock-async-storage";
jest.mock(
"@react-native-async-storage/async-storage",
() => new MockAsyncStorage()
);
`
I removed the jest specific part from the mock lib. In the next version
the mocking method is not predefined. You can use any kind of library (sinon) for use this mock.
I suggest to use jest manual mocks
Jest Manual Mocks
For demonstrate this solution you can find an example in examples folder.
`JavaScript
import MockAsyncStorage from 'mock-async-storage';
// or import { mock, release } from 'mock-async-storage';
// mock();
// release();
const mock = () => {
const mockImpl = new MockAsyncStorage()
jest.mock('AsyncStorage', () => mockImpl)
}
const release = () => jest.unmock('AsyncStorage')
mock();
// For unmock
mockStorage.release();
`
Working example:
`JavaScript
import 'react-native';
import MockAsyncStorage from 'mock-async-storage'
import React from 'react';
import Index from '../index.android.js';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
const mock = () => {
const mockImpl = new MockAsyncStorage()
jest.mock('AsyncStorage', () => mockImpl)
}
mock();
import { AsyncStorage as storage } from 'react-native'
it('renders correctly', () => {
const tree = renderer.create(
);
});
it('Mock Async Storage working', async () => {
await storage.setItem('myKey', 'myValue')
const value = await storage.getItem('myKey')
expect(value).toBe('myValue')
})
`
In your test codes:
`JavaScript
const mockStorage = require('mock-async-storage');
// or import { mock, release } from 'mock-async-storage';
// mock();
// release();
// For mock AsyncStorage
mockStorage.mock();
// For unmock
mockStorage.release();
`
Working example:
`JavaScript
import 'react-native';
import { mock, release } from 'mock-async-storage'
import React from 'react';
import Index from '../index.android.js';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
mock()
import { AsyncStorage as storage } from 'react-native'
it('renders correctly', () => {
const tree = renderer.create(
);
});
it('Mock Async Storage working', async () => {
await storage.setItem('myKey', 'myValue')
const value = await storage.getItem('myKey')
expect(value).toBe('myValue')
})
``