how to change jest mock function return value in each test?

前端 未结 3 1654
暗喜
暗喜 2020-12-23 11:29

I have a mock module like this in my component test file

  jest.mock(\'../../../magic/index\', () => ({
    navigationEnabled: () => true,
    guidance         


        
相关标签:
3条回答
  • 2020-12-23 11:33

    I had a hard time getting the accepted answers to work - my equivalents of navigationEnabled and guidanceEnabled were undefined when I tried to call mockReturnValueOnce on them.

    Here's what I had to do:

    In ../../../magic/__mocks__/index.js:

    export const navigationEnabled = jest.fn();
    export const guidanceEnabled = jest.fn();
    

    in my index.test.js file:

    jest.mock('../../../magic/index');
    import { navigationEnabled, guidanceEnabled } from '../../../magic/index';
    import { functionThatReturnsValueOfNavigationEnabled } from 'moduleToTest';
    
    it('is able to mock', () => {
      navigationEnabled.mockReturnValueOnce(true);
      guidanceEnabled.mockReturnValueOnce(true);
      expect(functionThatReturnsValueOfNavigationEnabled()).toBe(true);
    });
    
    0 讨论(0)
  • 2020-12-23 11:50

    what you want to do is

    import { navigationEnabled, guidanceEnabled } from '../../../magic/index';   
    
    jest.mock('../../../magic/index', () => ({
      navigationEnabled: jest.fn(),
      guidanceEnabled: jest.fn()
    }));
    
    describe('test suite', () => {
      it('every test', () => {
        navigationEnabled.mockReturnValueOnce(value);
        guidanceEnabled.mockReturnValueOnce(value);
      });
    });
    

    you can look more about these functions here =>https://facebook.github.io/jest/docs/mock-functions.html#mock-return-values

    0 讨论(0)
  • 2020-12-23 11:59

    You can mock the module so it returns spies and import it into your test:

    import {navigationEnabled, guidanceEnabled} from '../../../magic/index'
    
    jest.mock('../../../magic/index', () => ({
        navigationEnabled: jest.fn(),
        guidanceEnabled: jest.fn()
    }));
    

    Then later on you can change the actual implementation using mockImplementation

    navigationEnabled.mockImplementation(()=> true)
    //or
    navigationEnabled.mockReturnValueOnce(true);
    

    and in the next test

    navigationEnabled.mockImplementation(()=> false)
    //or
    navigationEnabled.mockReturnValueOnce(false);
    
    0 讨论(0)
提交回复
热议问题