Не удается найти модуль 'AsyncStorage' при тестировании с помощью Jest / Enzyme - PullRequest
2 голосов
/ 08 января 2020

Я делаю простые тесты в реактивном режиме с Jest и Enzyme. В данный момент я тестирую и издеваюсь над AsyncStorage, но каждый тест, где я это делаю, не проходит. Я попытался поместить код в beforeEach(() => {}), но он тоже не работает. Проверьте код ниже:

import 'react-native';
import React from 'react';
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import MockStorage from '../../__mocks__/mockStorage';

const middlewares = [thunk]; 
const mockStore = configureStore(middlewares);

describe('testing 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)));
    });
  }

Тест не пройден со следующей ошибкой:

Не удается найти модуль 'AsyncStorage' от 'myFileName. js'

Любая помощь? Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вот кое-что, что сработало для меня для тех, кто все еще ищет. Пересмешивать весь модуль реакции-родного не получалось, но указывал путь к модулю AsyncStorage.

const mockItems = {};
jest.mock('react-native/Libraries/Storage/AsyncStorage', () => ({
    setItem: jest.fn((item, value) => {
        return new Promise((resolve, reject) => {
            mockItems[item] = value;
            resolve(value);
        });
    }),
    getItem: jest.fn((item) => {
        return new Promise((resolve, reject) => {
            resolve(mockItems[item]);
        });
    }),
}));
0 голосов
/ 08 января 2020

Вы можете попробовать установить макет в beforeEach в вашем тестовом файле вместо setMock на root уровне

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

  jest.mock('AsyncStorage', () => new MockStorage(storageCache));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...