Jest - Как смоделировать нестандартный экспорт из модулей? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь смоделировать NativeModules из react-native, но я не могу найти способ высмеивать только этот класс, а не весь модуль react-native.

В основном, в моем производствекод я делаю это:

import { NativeModules } from 'react-native'
const { MyCustomNativeModule } = NativeModules

В моих тестах я хочу переписать MyCustomNativeModule.На данный момент единственный способ, который я нашел, - это смоделировать весь модуль react-native следующим образом:

// /__mocks__/react-native.js

module.exports = {
  NativeModules: {
    MyCustomNativeModule: {
      dismiss: () => {},
    },
  },
}

Но это нарушает все остальные функции react-native.Я видел, что часто люди используют такие методы, как joy.mock('NativeModules', () => ... ), но на самом деле это не работает!

1 Ответ

0 голосов
/ 28 января 2019

что по этому поводу: https://jestjs.io/docs/en/es6-class-mocks

класс

// sound-player.js
 export default class SoundPlayer {
   constructor() {
    this.foo = 'bar';
 }

  playSoundFile(fileName) {
   console.log('Playing sound file ' + fileName);
 }
}

насмешка с jest.mock ()

import SoundPlayer from './sound-player';
const mockPlaySoundFile = jest.fn();
jest.mock('./sound-player', () => {
   return jest.fn().mockImplementation(() => {
       return {playSoundFile: mockPlaySoundFile};
    });
  });

ОБНОВЛЕНИЕ

Как насчет этого:

function mockFunctions() {
  const original = require.requireActual('../myModule');
  return {
    ...original, //Pass down all the exported objects
    test: jest.fn(() => {console.log('I didnt call the original')}),
    someFnIWantToCurry: {console.log('I will curry the original') return jest.fn((...args) => original.someFnIWantToCurry(...args)}),
  }
jest.mock('../myModule', () => mockFunctions());
const storage = require.requireMock('../myModule');

см .: https://github.com/facebook/jest/issues/936#issuecomment-265074320

...