jest.mock() はテスト内では動作せず、テスト外でのみ動作します。質問する

jest.mock() はテスト内では動作せず、テスト外でのみ動作します。質問する

簡単なテスト スイートがあり、場合によってはモジュールをモック化したい場合と、そうでない場合があります。ただし、jest.mock()テストの外部に配置されている場合にのみ機能します。なぜそうなるのか、また、私が何を間違っているのか、誰か分かるでしょうか?

これは私がモックしたい関数の実際のインポートです

import {hasSupport, getCallingCode} from 'utils/countryCallingCode';

そして、これはこの関数のモックです:

jest.mock('utils/countryCallingCode', () => ({
    getCallingCode: () => '1',
    hasSupport: () => true,
  }));

現在、動作シナリオは次のとおりです。

//imports
//mock

describe('...', () -> {
    it('...', () -> {

    });
});

これは機能しません:

//imports

describe('...', () -> {
    //mock

    it('...', () -> {

    });
});

これも動作しません:

//imports

describe('...', () -> {
    it('...', () -> {
        //mock
    });
});

ベストアンサー1

使用mockReturnValue(...)

import {
  getCallingCode,
  hasSupport,
} from 'utils/countryCallingCode'

jest.mock('utils/countryCallingCode', () => ({
  getCallingCode: jest.fn(),
  hasSupport: jest.fn(),
}))

describe('...', () => {
    it('...', () => {
        getCallingCode.mockReturnValue(1)
        hasSupport.mockReturnValue(false)

        expect(...
    })

    it('...', () => {
        getCallingCode.mockReturnValue(0)
        hasSupport.mockReturnValue(true)

        expect(...
    })
})

そのユーティリティからのデフォルトのエクスポートを処理する:

import theUtil from 'utils/theUtil'

jest.mock('utils/theUtil', () => ({
  __esModule: true,
  default: jest.fn(),
}))

describe('...', () => {
    it('...', () => {
        theUtil.mockReturnValue('some value')

        expect(...
    })

    it('...', () => {
        theUtil.mockReturnValue('some other value')

        expect(...
    })
})

タイプスクリプト:

を使用しますas jest.Mock。例:

...
(getCallingCode as jest.Mock).mockReturnValue(1)
...
(theUtil as jest.Mock).mockReturnValue('some value')
...

あるいは、もっと簡潔に言うと:

import theUtil from 'utils/theUtil'

jest.mock('utils/theUtil', () => ({
  __esModule: true,
  default: jest.fn(),
}))
const mockTheUtil = theUtil as jest.Mock

describe('...', () => {
    it('...', () => {
        mockTheUtil.mockReturnValue('some value')

        expect(...
    })
})

おすすめ記事