同じファイル内の別の関数が呼び出すエクスポートされた関数をスパイしようとしています。
Jestにスパイをまったく使用させることができないようです。
mockImplementation と mockReturnValue を混ぜて試してみました。
ユーティリティ.ts:
export const func1 = (x: number) => {
const y = x + 1
return y
}
export const func2 = (a: number) => {
const b = a + 2
return b
}
export const func3 = (x: number, y: number) => {
const foo = func1(x)
const bar = func2(y)
return foo + bar
}
utils.test.ts:
import * as sut from './utils'
describe('test', () => {
test('func3 spys', () => {
let func1Spy: jest.SpyInstance
let func2Spy: jest.SpyInstance
func1Spy = jest.spyOn(sut, 'func1').mockImplementation(() => 8)
func2Spy = jest.spyOn(sut, 'func2').mockImplementation(() => 10)
const result = sut.func3(1, 2)
expect(func1Spy).toHaveBeenCalled()
expect(func2Spy).toHaveBeenCalled()
expect(result).toBe(6)
})
})
予想される動作: Jest は、スパイされた関数が呼び出されたことを確認します 実際の出力:
Expected number of calls: >= 1
Received number of calls: 0
スパイ コール アサーションをコメント アウトすると、関数が正しく実行されているため、合格テストが得られます。スパイがいなくても