Estoy usando el módulo fs para importar una cadena html a mi módulo, así:
const fs = require('fs'); const htmlString = fs.readFileSync("../utils/htmlString.html").toString();Luego, en mi archivo de prueba, intento simular el módulo fs de esta manera:
const fs = require('fs'); jest.mock("fs", () => { return { readFileSync: jest.fn() } }) fs.readFileSync.mockReturnValue("test string");Mi lógica posiblemente incorrecta me dice que debería simular correctamente la importación de la cadena original y reemplazarla con una cadena de "cadena de prueba". Sin embargo, mientras se ejecuta la prueba arroja:
TypeError: no se puede leer la propiedad 'toString' de undefined
Entiendo que esto significa que el simulacro no tuvo éxito, ya que debería llamar correctamente a .toString() en una instancia de cadena.
¿Qué estoy haciendo mal aquí?
No necesita proporcionar el argumento de fábrica del módulo explícitamente para jest.mock('fs') . jest.mock() se burla de un módulo con una versión auto-simulada cuando se requiere. Esto significa que fs.readFileSync es un método simulado con lo mismo jest.fn() .
Debe asegurarse de solicitar el módulo bajo prueba después de burlarse del valor de retorno, ya que el código en el alcance del módulo se ejecutará instantáneamente cuando sea necesario.
P.ej
index.js :
const fs = require('fs'); const htmlString = fs.readFileSync('../utils/htmlString.html').toString(); console.log('htmlString: ', htmlString); index.test.js :
const fs = require('fs'); jest.mock('fs'); describe('70760704', () => { test('should pass', () => { expect(jest.isMockFunction(fs.readFileSync)).toBeTruthy(); fs.readFileSync.mockReturnValue('test string'); require('./'); }); });Resultado de la prueba:
PASS stackoverflow/70760704/index.test.js (7.242 s) 70760704 ✓ should pass (14 ms) console.log htmlString: test string at Object.<anonymous> (stackoverflow/70760704/index.js:3:9) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 7.279 s, estimated 8 s jest.config.js :
module.exports = { testEnvironment: 'node', };versiones del paquete:
"jest": "^26.6.3"