簡単なテスト スイートがあり、場合によってはモジュールをモック化したい場合と、そうでない場合があります。ただし、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(...
})
})