Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Não entendi como as coisas se relacionam

Não consegui entender como o

 (useListaDeParticipantes as jest.Mock).mockReturnValue(participantes)

E o

jest.mock( '../state/hooks/useListaDeParticipantes', ()=>{
    return {
        useListaDeParticipantes: jest.fn() 
    }
})

... estão conectados. O que é que está sendo interpretado como jest.Mock, o método ou o retorno do método?

Por que a chave do objeto e o método devem ter o mesmo nome?

Existe alguma outra maneira de fazer isso?

Eu estou chamando o hook no código original ou executando uma "função falsa" toda vez que ele é chamado?

E se for uma função falsa, por que eu preciso do (useListaDeParticipantes as jest.Mock).mockReturnValue(participantes), sendo o useListaDeParticipantes literalmente o módulo a ser substituído pela função falsa?

2 respostas
solução!

Salve Daniel!

Primeiramente, pergunta incrível! Essa curiosidade vai te ajudar muito no decorrer da sua jornada. Agora, vamos a sua dúvida:

A linha (useListaDeParticipantes as jest.Mock).mockReturnValue(participantes) está dizendo que, quando a função useListaDeParticipantes for chamada, o valor retornado será participantes. Já a linha jest.mock('../state/hooks/useListaDeParticipantes', ()=>{...}) está dizendo que, quando o módulo useListaDeParticipantes for importado, ele será substituído pela função falsa que está sendo definida ali.

A chave do objeto e o método devem ter o mesmo nome porque é assim que o Jest identifica que a função está sendo mockada. Se você mudar o nome da chave, o Jest não vai entender que aquela função deve ser substituída.

Quanto à sua pergunta sobre estar chamando o hook original ou uma função falsa, a resposta é: depende. Se você estiver testando um componente que usa o hook, o Jest vai substituir o hook original pela função falsa que você definiu. Mas se você estiver testando o próprio hook, a função falsa não será usada e o hook original será executado normalmente.

Espero ter ajudado e bons estudos!

Muito obrigado, agora consigo continuar.