我最初的回答只是指出react-native-simple-store的作者如何处理模拟。我用自己的模拟更新了答案,该模拟除去了Jason的硬编码模拟响应。
Jason
Merino在https://github.com/jasonmerino/react-
native-simple-store/blob/master/ tests /index-
test.js#L31-L64有一个很好的简单方法
****
jest.mock('react-native', () => ({AsyncStorage: { setItem: jest.fn(() => { return new Promise((resolve, reject) => { resolve(null); }); }), multiSet: jest.fn(() => { return new Promise((resolve, reject) => { resolve(null); }); }), getItem: jest.fn(() => { return new Promise((resolve, reject) => { resolve(JSON.stringify(getTestData())); }); }), multiGet: jest.fn(() => { return new Promise((resolve, reject) => { resolve(multiGetTestData()); }); }), removeItem: jest.fn(() => { return new Promise((resolve, reject) => { resolve(null); }); }), getAllKeys: jest.fn(() => { return new Promise((resolve) => { resolve(['one', 'two', 'three']); }); }) }}));我自己的模拟:
const items = {};jest.mock('react-native', () => ({AsyncStorage: { setItem: jest.fn((item, value) => { return new Promise((resolve, reject) => { items[item] = value; resolve(value); }); }), multiSet: jest.fn((item, value) => { return new Promise((resolve, reject) => { items[item] = value; resolve(value); }); }), getItem: jest.fn((item, value) => { return new Promise((resolve, reject) => { resolve(items[item]); }); }), multiGet: jest.fn((item) => { return new Promise((resolve, reject) => { resolve(items[item]); }); }), removeItem: jest.fn((item) => { return new Promise((resolve, reject) => { resolve(delete items[item]); }); }), getAllKeys: jest.fn((items) => { return new Promise((resolve) => { resolve(items.keys()); }); }) }}));


