How to mock an exported const in jest

后端 未结 8 1705
借酒劲吻你
借酒劲吻你 2020-12-23 18:35

I have a file that relies on an exported const variable. This variable is set to true but if ever needed can be set to false manually

相关标签:
8条回答
  • 2020-12-23 19:36

    Facing the same issue, I found this blog post very useful, and much simpler than @cyberwombat use case :

    https://remarkablemark.org/blog/2018/06/28/jest-mock-default-named-export/

    // esModule.js
    export default 'defaultExport';
    export const namedExport = () => {};
    
    // esModule.test.js
    jest.mock('./esModule', () => ({
      __esModule: true, // this property makes it work
      default: 'mockedDefaultExport',
      namedExport: jest.fn(),
    }));
    
    import defaultExport, { namedExport } from './esModule';
    defaultExport; // 'mockedDefaultExport'
    namedExport; // mock function
    
    0 讨论(0)
  • 2020-12-23 19:40

    I solved this by initializing constants from ContstantsFile.js in reducers. And placed it in redux store. As jest.mock was not able to mock the contstantsFile.js

    constantsFile.js
    -----------------
    const MY_CONSTANTS = {
    MY_CONSTANT1: "TEST",
    MY_CONSTANT2: "BEST",
    };
    export defualt MY_CONSTANTS;
    
    reducers/index.js
    -----------------
    import MY_CONST from "./constantsFile";
    
    const initialState = {
    ...MY_CONST
    }
    export const AbcReducer = (state = initialState, action) => {.....}
    
    ABC.jsx
    ------------
    import { useSelector } from 'react-redux';
    const ABC = () => {
    const const1 = useSelector(state) => state. AbcReducer. MY_CONSTANT1:
    const const2 = useSelector(state) => state. AbcReducer. MY_CONSTANT2:
    .......
    

    Now we can easily mock the store in test.jsx and provide the values to constant that we want.

    Abc.text.jsx
    -------------
    import thunk from 'redux-thunk';
    import configureMockStore from 'redux-mock-store';
    
    describe('Abc mock constants in jest', () => {
    const mockStore = configureMockStore([thunk]);
    let store = mockStore({
       AbcReducer: {
          MY_CONSTANT1 ="MOCKTEST",
          MY_CONSTANT2 = "MOCKBEST",
       }
    });
    
    test('your test here', () => { .....
    

    Now when the test runs it will always pick the constant value form mock store.

    0 讨论(0)
提交回复
热议问题