Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

168
Visualizações
¿Cómo burlarse del módulo fs junto con unionfs?

Escribí un caso de prueba que cargó con éxito archivos en FS virtual y, al mismo tiempo, monté un volumen virtual como se muestra a continuación.

 describe("should work", () => { const { vol } = require("memfs"); afterEach(() => vol.reset()); beforeEach(() => { vol.mkdirSync(process.cwd(), { recursive: true }); jest.resetModules(); jest.resetAllMocks(); }); it("should be able to mock fs that being called in actual code", async () => { jest.mock("fs", () => { return ufs // .use(jest.requireActual("fs")) .use(createFsFromVolume(vol) as any); }); jest.mock("fs/promises", () => { return ufs // .use(jest.requireActual("fs/promises")) .use(createFsFromVolume(vol) as any); }); const { createFsFromVolume } = require("memfs"); const { ufs } = require("unionfs"); const { countFile } = require("../src/ops/fs"); vol.fromJSON( { "./some/README.md": "1", "./some/index.js": "2", "./destination": null, }, "/app" ); const result = ufs.readdirSync(process.cwd()); const result2 = ufs.readdirSync("/app"); const result3 = await countFile("/app"); console.log({ result, result2, result3 }); }); });

Mediante el uso de ufs.readdirSync , puedo acceder a FS virtual y, de hecho, darme como result archivos que se cargaron desde el disc en virtual FS , y result2 representa /app que es un nuevo volumen creado a partir de vol.fromJSON .

Ahora mi problema es que no puedo obtener el resultado de result3 , que está llamando al método countFile como se muestra a continuación

 import fsPromises from "fs/promises"; export const countFile = async (path: string) => { const result = await fsPromises.readdir(path); return result.length; };

estoy recibiendo un error

Error: ENOENT: no existe tal archivo o directorio, scandir '/app'

lo cual creo que es porque countFile está accediendo al FS real en lugar del virtual a pesar de que he tenido jest.mock('fs/promises') ?

Por favor, si alguien puede proporcionar alguna pista?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esta es la función que desea probar unitariamente.

 //CommonJS version const fsPromises = require('fs/promises'); const countFile = async (path) => { const result = await fsPromises.readdir(path); return result.length; }; module.exports = { countFile }

Ahora, la forma en que normalmente haría esto es burlarse de fsPromises . En este ejemplo específicamente readdir() ya que esa es la función que se usa en countFile.

Esto es lo que llamamos: un trozo.

Una implementación esquelética o de propósito especial de un componente de software, que se utiliza para desarrollar o probar un componente que lo llama o depende de otro modo. Reemplaza un componente llamado.

 const {countFile} = require('./index'); const {readdir} = require("fs/promises"); jest.mock('fs/promises'); beforeEach(() => { readdir.mockReset(); }); it("When testing countFile, given string, then return files", async () => { const path = "/path/to/dir"; // vvvvvvv STUB HERE readdir.mockResolvedValueOnce(["src", "node_modules", "package-lock.json" ,"package.json"]); const res = await countFile(path); expect(res).toBe(4); })

Haces esto porque estás realizando pruebas unitarias . No desea depender de otras funciones porque eso no es una prueba unitaria y más una prueba de integración. En segundo lugar, es una biblioteca de terceros, que es mantenida/probada por otra persona.

Aquí es donde se aplica su escenario. Desde mi perspectiva, su objetivo no es probar countFile() sino probar fsPromises y tal vez probar la funcionalidad para leer sistemas de archivos virtuales: unionfs . Si es así, no es necesario burlarse de fsPromises .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda