Búsqueda de sitios web

javascript - Simular el valor de retorno de una función importada en Typescript con Jest


Tengo una función, llamémosla generateName, que como habrás adivinado, genera un nombre. El problema es que se genera un nombre nuevo cada vez que se ejecuta una prueba.

En una de mis pruebas, afirmo que se llama a una función con un objeto que contiene este nombre. Sin embargo, el nombre sigue cambiando. Podría simplemente comprobar que el objeto tiene la propiedad nombre, pero realmente no quiero hacer eso.

Mi idea es que puedo simular el valor de retorno de la función generateName y hacer algo así

Import { generateName } from ‘libs/generateName’

jest.fn(generateName).mockResolvedValue ( ‘hello’ )

expect ( spy ).toHaveBeenCalledWith ( 
      expect.objectContaining ( {
        name: 'houses',
      } )
)

Respuesta #1

Puedes usar jest.mock(moduleName, factory, options) para simular el módulo libs/generateName.

Por ejemplo, generateName.ts:

export async function generateName() {
  const name = Math.random() + '';
  return name;
}

main.ts:

import { generateName } from './generateName';

export function main() {
  return generateName();
}

main.test.ts:

import { main } from './main';
import { generateName } from './generateName';

jest.mock('./generateName', () => {
  return {
    generateName: jest.fn(),
  };
});

describe('61350152', () => {
  it('should pass', async () => {
    (generateName as jest.MockedFunction<typeof generateName>).mockResolvedValueOnce('hello');
    const actual = await main();
    expect(actual).toBe('hello');
  });
});

resultados de la prueba unitaria con informe de cobertura:

 PASS  stackoverflow/61350152/main.test.ts (28.524s)
  61350152
    ✓ should pass (6ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 main.ts  |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        31.98s

Artículos relacionados