使用Jest / Enzyme测试时找不到模块'AsyncStorage'

问题描述 投票:1回答:1

我正在用Jest和Enzyme做本机反应的简单测试。目前,我正在测试和模拟AsyncStorage,但是每次测试都失败了。检查下面的代码:

// Mock AsyncStorage
const storageCache = {
    '@token': '123sometoken987',
    '@messages': 'this is a message'
};

const AsyncStorage = new MockStorage(storageCache);
jest.setMock('AsyncStorage', AsyncStorage);
        ^ // fails here

这里是我的mockStorage.js

export default class MockStorage {
    constructor(cache = {}) {
      this.storageCache = cache;
    }

    setItem = jest.fn((key, value) => {
      return new Promise((resolve, reject) => {
        return (typeof key !== 'string' || typeof value !== 'string')
            ? reject(new Error('key and value must be string'))
            : resolve(this.storageCache[key] = value);
         });
    });

    getItem = jest.fn((key) => {
      return new Promise((resolve) => {
        return this.storageCache.hasOwnProperty(key)
            ? resolve(this.storageCache[key])
            : resolve(null);
        });
    });

    removeItem = jest.fn((key) => {
      return new Promise((resolve, reject) => {
        return this.storageCache.hasOwnProperty(key)
            ? resolve(delete this.storageCache[key])
            : reject('No such key!');
        });
    });

    clear = jest.fn((key) => {
        return new Promise((resolve, reject) =>  resolve(this.storageCache = {}));
    });

    getAllKeys = jest.fn((key) => {
        return new Promise((resolve, reject) => resolve(Object.keys(this.storageCache)));
    });
  }

测试失败,并出现以下错误:

无法从'myFileName.js'找到模块'AsyncStorage']

有帮助吗?谢谢!

reactjs react-native jestjs enzyme
1个回答
0
投票

您可以尝试在测试文件的beforeEach中而不是在根级别的setMock中设置模拟

beforeEach(() => {
  const storageCache = {
    '@token': '123sometoken987',
    '@messages': 'this is a message'
  };

  jest.mock('AsyncStorage', () => new MockStorage(storageCache);
});
© www.soinside.com 2019 - 2024. All rights reserved.