Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

325
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!