|
10 | 10 | jest.autoMockOff(); |
11 | 11 |
|
12 | 12 | const mockRNStorageInterface = require('./test_helpers/mockRNStorage'); |
| 13 | +const mockStorageInterface = require('./test_helpers/mockStorageInteface'); |
| 14 | +const mockIndexedDB = require('./test_helpers/mockIndexedDB'); |
13 | 15 | const mockWeChat = require('./test_helpers/mockWeChat'); |
14 | 16 | const CoreManager = require('../CoreManager'); |
15 | 17 |
|
16 | 18 | global.wx = mockWeChat; |
17 | | - |
18 | | -let mockStorage = {}; |
19 | | -const mockStorageInterface = { |
20 | | - getItem(path) { |
21 | | - return mockStorage[path] || null; |
22 | | - }, |
23 | | - |
24 | | - getItemAsync(path) { |
25 | | - return Promise.resolve(mockStorageInterface.getItem(path)); |
26 | | - }, |
27 | | - |
28 | | - setItem(path, value) { |
29 | | - mockStorage[path] = value; |
30 | | - }, |
31 | | - |
32 | | - setItemAsync(path, value) { |
33 | | - return Promise.resolve(mockStorageInterface.setItem(path, value)); |
34 | | - }, |
35 | | - |
36 | | - removeItem(path) { |
37 | | - delete mockStorage[path]; |
38 | | - }, |
39 | | - |
40 | | - removeItemAsync(path) { |
41 | | - return Promise.resolve(mockStorageInterface.removeItem(path)); |
42 | | - }, |
43 | | - |
44 | | - clear() { |
45 | | - mockStorage = {}; |
46 | | - }, |
47 | | -}; |
48 | | - |
49 | 19 | global.localStorage = mockStorageInterface; |
| 20 | +jest.mock('idb-keyval', () => { |
| 21 | + return mockIndexedDB; |
| 22 | +}); |
50 | 23 |
|
51 | 24 | const BrowserStorageController = require('../StorageController.browser'); |
52 | 25 |
|
@@ -192,6 +165,46 @@ describe('React Native StorageController', () => { |
192 | 165 | }); |
193 | 166 | }); |
194 | 167 |
|
| 168 | +const IndexedDBStorageController = require('../IndexedDBStorageController'); |
| 169 | + |
| 170 | +describe('React Native StorageController', () => { |
| 171 | + beforeEach(() => { |
| 172 | + IndexedDBStorageController.clear(); |
| 173 | + }); |
| 174 | + |
| 175 | + it('is asynchronous', () => { |
| 176 | + expect(IndexedDBStorageController.async).toBe(1); |
| 177 | + expect(typeof IndexedDBStorageController.getItemAsync).toBe('function'); |
| 178 | + expect(typeof IndexedDBStorageController.setItemAsync).toBe('function'); |
| 179 | + expect(typeof IndexedDBStorageController.removeItemAsync).toBe('function'); |
| 180 | + }); |
| 181 | + |
| 182 | + it('can store and retrieve values', async () => { |
| 183 | + let result = await IndexedDBStorageController.getItemAsync('myKey'); |
| 184 | + expect(result).toBe(null); |
| 185 | + await IndexedDBStorageController.setItemAsync('myKey', 'myValue'); |
| 186 | + result = await IndexedDBStorageController.getItemAsync('myKey'); |
| 187 | + expect(result).toBe('myValue'); |
| 188 | + }); |
| 189 | + |
| 190 | + it('can remove values', async () => { |
| 191 | + await IndexedDBStorageController.setItemAsync('myKey', 'myValue'); |
| 192 | + let result = await IndexedDBStorageController.getItemAsync('myKey'); |
| 193 | + expect(result).toBe('myValue'); |
| 194 | + await IndexedDBStorageController.removeItemAsync('myKey'); |
| 195 | + result = await IndexedDBStorageController.getItemAsync('myKey'); |
| 196 | + expect(result).toBe(null); |
| 197 | + }); |
| 198 | + |
| 199 | + it('can getAllKeys', async () => { |
| 200 | + await IndexedDBStorageController.setItemAsync('myKey', 'myValue'); |
| 201 | + const result = await IndexedDBStorageController.getItemAsync('myKey'); |
| 202 | + expect(result).toBe('myValue'); |
| 203 | + const keys = await IndexedDBStorageController.getAllKeysAsync(); |
| 204 | + expect(keys[0]).toBe('myKey'); |
| 205 | + }); |
| 206 | +}); |
| 207 | + |
195 | 208 | const DefaultStorageController = require('../StorageController.default'); |
196 | 209 |
|
197 | 210 | describe('Default StorageController', () => { |
|
0 commit comments