Проблема в том, что ваша функция возвращает обещание.В зависимости от того, как вы его используете, существует несколько способов его смоделировать.
Самый простой способ - смоделировать его напрямую, но тогда он всегда будет возвращать одно и то же значение:
// note, the path is relative to your test file
jest.mock('./util', () => ({ getData: ()=>'someValue' }))
Есливы хотите протестировать как разрешенный, так и отклоненный случай, который вам нужно смоделировать getData
, чтобы он возвратил шпиона, где вы позже сможете изменить реализацию, используя mockImplementation
.Вам также нужно использовать async/await
, чтобы тест работал, посмотрите на документы об асинхронном тестировании:
import {getData} from './util'
jest.mock('./util', () => ({ getData: ()=> jest.fn() }))
it('success case', async ()=>{
const result = Promise.resolve('someValue')
getData.mockImplementation(()=> result)
// call your function to test
await result // you need to use await to make jest aware of the promise
})
it('error case', async()=>{
const result = Promise.reject(new Error('someError))
getData.mockImplementation(()=> result)
// call your function to test
await expect(result).rejects.toThrow('someError');
})