unit-testing - unit - que es jest js
Jest: Cambia la salida del simulacro manual para diferentes pruebas dentro de un conjunto de prueba (0)
Digamos que tengo los siguientes dos archivos:
// index.js
...
import { IS_IOS } from ''common/constants/platform'';
...
export const myFunction = () => (IS_IOS ? ''foo'' : ''bar'');
// index.test.js
...
import { myFunction } from ''./index'';
jest.mock(''common/constants/platform'', () => ({ IS_IOS: true }));
describe(''My test'', () => {
it(''tests behavior on IOS'', () => {
expect(myFunction()).toBe(''foo'');
});
// --> Here I want to change the value of IS_IOS to false
it(''tests behavior if NOT IOS'', () => {
expect(myFunction()).toBe(''bar'');
});
});
Como ve, mi función de burla devuelve IS_IOS: true
. Quiero que devuelva IS_IOS: false
después de mi primera prueba. ¿Como podría hacerlo?
También intenté una adaptación de la solución aquí, pero no pude hacer que funcione, porque allí el simulacro devuelve una función:
module.exports = {
foo: jest.genMockFunction();
}
mientras que mi simulacro debería devolver un valor booleano que no se llama dentro del archivo que estoy probando. Eso es lo que hice aquí:
// common/constants/__mock__/platform
export const setIsIos = jest.fn(val => (IS_IOS = val));
export let IS_IOS;
// index.test.js
...
import { IS_IOS, setIsIos } from ''common/constants/platform'';
jest.mock(''common/constants/platform'');
describe(''My test'', () => {
setIsIos(''foo'');
it(''tests behavior on IOS'', () => {
expect(myFunction()).toBe(''foo'');
});
setIsIos(''bar'');
it(''tests behavior if NOT IOS'', () => {
expect(myFunction()).toBe(''bar'');
});
});
Curiosamente cuando el registro de la console.log(IS_IOS);
, es decir, console.log(IS_IOS);
Obtengo los valores esperados. Sin embargo, la prueba parece usar el valor original, es decir, undefined
.