模拟本机模块笑话

时间:2018-12-17 11:46:50

标签: react-native jestjs

在我的React-Native应用程序中,我想为我的本机库编写一些单元测试。

dataStorage.js

import RNDataStorage, {ACCESSIBLE} from "react-native-data-storage";

const dataStorage = {
    setData: function (key, value) {
        return RNDataStorage.set(key, value, {accessible: ACCESSIBLE.ALWAYS_THIS_DEVICE_ONLY})
        .then(res => {
            console.log(res);
            return true;
        })
    },
}

export default dataStorage;

dataStorage.test.js

import dataStorage from '../../src/services/dataStorage'

jest.mock('react-native-data-storage', () => {
    return {
        RNDataStorage: {
            set: jest.fn(),
        }
    };
});

it('Should return Access & RefreshToken', function () {
    dataStorage.setData('John', 'Test');
});

运行此设置时,收到错误消息:TypeError: Cannot read property 'set' of undefined

模拟某些模块的正确方法是什么?感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您要模拟的模块是具有默认导出和命名导出的ES6模块。

像这样模拟它可以使您的测试运行:

jest.mock('react-native-data-storage', () => {
    return {
      __esModule: true,
      default: {
        set: jest.fn(() => Promise.resolve('the response'))
      },
      ACCESSIBLE: {
        ALWAYS_THIS_DEVICE_ONLY: true
      }
    };
});

基于this post

的答案