Não consigo entender por que esse teste falha; Reduzi o problema a esses 2 arquivos.
[arquivo: esm-user.js]
const getJack = () => {return 'Jack';};
const getJill = () => {return 'Jill';};
const getUsers = () => {return [getJack(), getJill()];};
export default { getUsers, getJack };
[arquivo: esm-user-spy.spec.js]
import users from './esm-user';
describe("Mocks and Spies", () => {
test.only("partial mock (jack)", () => {
var getJackSpy = jest.spyOn(users, 'getJack').mockReturnValue('Mock Jack');
expect(users.getUsers()).toEqual(['Mock Jack', 'Jill']);
});
});
[saída]
expect(received).toEqual(expected) // deep equality
Array [
- "Mock Jack",
+ "Jack",
"Jill",
]
getUsers
chama a declaração da funçãogetJack
, mas você está espionando a propriedadegetJack
do objeto de exportação padrão e substituindo o valor nessa chave da exportação padrão pela sua implementação simulada.getUsers
nesse arquivo não chamagetJack
o objeto de exportação padrão, ele chama agetJack
declaração no arquivo.A seguir está uma maneira de fazer isso, por exemplo (há muitas outras), porque a função da qual você está zombando da implementação é a mesma que está sendo chamada em
getUsers