reactjs - script - react helmet sync
¿Cómo cambiar el valor de retorno de la función simulacro de jest en cada prueba? (3)
Tengo un módulo simulado como este en mi archivo de prueba de componentes
jest.mock(''../../../magic/index'', () => ({
navigationEnabled: () => true,
guidanceEnabled: () => true
}));
estas funciones se llamarán en la función de procesamiento de mi componente para ocultar y mostrar alguna característica específica.
Quiero tomar una instantánea de diferentes combinaciones del valor de retorno de esas funciones simuladas.
Supongo que tengo un caso de prueba como este
it(''RowListItem should not render navigation and guidance options'', () => {
const wrapper = shallow(
<RowListItem type="regularList" {...props} />
);
expect(enzymeToJson(wrapper)).toMatchSnapshot();
});
para ejecutar este caso de prueba, quiero cambiar las funciones del módulo simulado que devuelven valores false
como este dinámicamente
jest.mock(''../../../magic/index'', () => ({
navigationEnabled: () => false,
guidanceEnabled: () => false
}));
porque ya estoy importando el componente RowListItem
una vez, así que mi módulo simulado no se volverá a importar. por lo que no va a cambiar. Como puedo resolver esto ?
Me costó mucho conseguir que las respuestas aceptadas funcionaran: mis equivalentes de navigationEnabled
mockReturnValueOnce
y guidanceEnabled
mockReturnValueOnce
no estaban definidos cuando intenté llamar a mockReturnValueOnce
.
Esto es lo que tenía que hacer:
En ../../../magic/__mocks__/index.js
:
export const navigationEnabled = jest.fn();
export const guidanceEnabled = jest.fn();
en mi archivo index.test.js
:
jest.mock(''../../../magic/index'');
import { navigationEnabled, guidanceEnabled } from ''../../../magic/index'';
import { functionThatReturnsValueOfNavigationEnabled } from ''moduleToTest'';
it(''is able to mock'', () => {
navigationEnabled.mockReturnValueOnce(true);
guidanceEnabled.mockReturnValueOnce(true);
expect(functionThatReturnsValueOfNavigationEnabled()).toBe(true);
});
Puedes burlarte del módulo para que devuelva espías e importarlo a tu prueba:
import {navigationEnabled, guidanceEnabled} from ''../../../magic/index''
jest.mock(''../../../magic/index'', () => ({
navigationEnabled: jest.fn(),
guidanceEnabled: jest.fn()
}));
Luego, más adelante, puede cambiar la implementación real utilizando mockImplementation
navigationEnabled.mockImplementation(()=> true)
//or
navigationEnabled.mockReturnValueOnce(true);
y en la proxima prueba
navigationEnabled.mockImplementation(()=> false)
//or
navigationEnabled.mockReturnValueOnce(false);
lo que quieres hacer es
import { navigationEnabled, guidanceEnabled } from ''../../../magic/index'';
jest.mock(''../../../magic/index'', () => ({
navigationEnabled: jest.fn(),
guidanceEnabled: jest.fn()
}));
describe(''test suite'', () => {
it(''every test'', () => {
navigationEnabled.mockReturnValueOnce(value);
guidanceEnabled.mockReturnValueOnce(value);
});
});
Puede ver más sobre estas funciones aquí => https://facebook.github.io/jest/docs/mock-functions.html#mock-return-values