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

332
Visualizações
¿Cómo limpiar/restablecer redis-mock en una prueba de Express Jest?

Tengo una aplicación que cuenta el número de visitas a la url. El conteo se realiza en Redis. Estoy usando redis-mock que simula comandos como INCR en la memoria.

La siguiente prueba visita la página 3 veces y espera que el objeto de respuesta informe current como 3 :

 let app = require('./app'); const supertest = require("supertest"); jest.mock('redis', () => jest.requireActual('redis-mock')); /* Preceeded by the exact same test */ it('should report incremented value on multiple requests', (done) => { const COUNT = 3; const testRequest = function (cb) { supertest(app).get('/test').expect(200, cb) }; async.series([ testRequest, testRequest, testRequest ], (err, results) => { if (err) console.error(err); const lastResponse = _.last(results).body; expect( lastResponse.current ).toBe(COUNT); done(); }); });

El problema es que si sigo reutilizando la app , el simulacro interno "redis" seguirá aumentando entre las pruebas.

Puedo eludir esto un poco haciendo esto:

 beforeEach(() => { app = require('./app'); jest.resetAllMocks(); jest.resetModules(); });

La aplicación de sobrescritura parece funcionar, pero ¿no hay una manera de limpiar el módulo simulado "interno" de alguna manera entre las pruebas?

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

0

Mi suposición es que, de alguna manera, el punto final '/ prueba' se invoca en algunas otras pruebas en la suite, podría intentar ejecutar partes específicas de su suite usando .only o incluso intentar ejecutar la suite completa en serie .

Para responder a las preguntas originales, todo el conjunto debe estar aislado y ser coherente, ya sea si está ejecutando un escenario de caso de prueba específico o si está intentando ejecutar todo el conjunto, por lo tanto, debe eliminar cualquier resto que pueda afectar los resultados.

Por lo tanto, puede usar los métodos .beforeEach o .beforeAll , proporcionados por Jest para "simular" Redis y el método .afterAll para la autorización.

Una implementación ficticia se vería así:

 import redis from "redis"; import redis_mock from "redis-mock"; import request from "supertest"; jest.mock("redis", () => jest.requireActual("redis-mock")); // Client to be used for manually resetting the mocked redis database const redisClient = redis.createClient(); // Sometimes order matters, since we want to setup the mock // and boot the app afterwards import app from "./app"; const COUNT = 3; const testRequest = () => supertest(app).get("/test"); describe("testing", () => { afterAll((done) => { // Reset the mock after the tests are done jest.clearAllMocks(); // You can also flush the mocked database here if neeeded and close the client redisClient.flushall(done); // Alternatively, you can also delete the key as redisClient.del("test", done); redisClient.quit(done); }); it("dummy test to run", () => { expect(true).toBe(true); }); it("the actual test", async () => { let last; // Run the requests in serial for (let i = 0; i < COUNT - 1; i++) { last = await testRequest(); } // assert the last one expect(last.status).toBe(200); expect(last.body.current).toBe(COUNT); }); });
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