Tengo una función que devuelve un objeto.
function getSettings() { return { foo: 'bar' } }Y tengo una función que usa la función anterior internamente
function myFunction() { const { foo } = getSettings() return foo } Y tengo una prueba que quiero cambiar el valor de foo
it('', async () => { const value = '123' const fooObj = {value: '123'} jest.spyOn(getSettings, 'foo').mockReturnValue(fooObj ) const result = myFunction() expect(result).toBe(value) }) Pero esto no funciona. ¿Alguna idea de cómo burlarse del valor de retorno de getSettings ?
No puede hacer jest.spyOn(getSettings, 'foo') , debe colocar el objeto/módulo en el primer argumento y el segundo argumento debe ser el nombre de la función.
Puedes probarlo cambiándolo a:
const fileWithGetSetting = require('<your-path>'); it('', async () => { // the key should be foo and not value const fooObj = {foo: '123'} jest.spyOn(fileWithGetSetting, 'getSettings').mockReturnValue(fooObj) const result = myFunction() expect(result).toBe(fooObj.foo) }) Si foo es primitivo (como en su prueba), debe actualizar la propiedad del objeto si el valor
function myFunction() { const settings = getSettings() // operation on setting.foo (if foo is primitive) return setting.foo }Y pasar el objeto en la prueba y no el valor primitivo
it('', async () => { const obj = {foo: '123'} jest.spyOn(getSettings, 'foo').mockReturnValue(obj) const result = myFunction() expect(result).toBe(obj.foo) }) Cuando pasó foo en sus pruebas, lo pasó por valor, debe pasarlo por referencia