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

157
Views
Verificaciones difusas de punto flotante contra argumentos de llamada simulados en Jest

Dada una función con una firma

 interface Position { x: number, y: number } function f(position: Position): void { … }

Quiero burlarme de eso en una prueba.

 // given const f = jest.fn() // when // exercise SUT // then expect(f).toHaveBeenCalledWith<Position>({x: 1.0, y: 1.0});

Pero desafortunadamente, estoy tratando con puntos flotantes, por lo que necesito la verificación para permitir un margen de maniobra. Ahora, podría hacer

 expect(f.mock.calls[0][0].x).toBeCloseTo(1, 1); expect(f.mock.calls[0][0].y).toBeCloseTo(1, 1);

Pero eso envejece muy rápido. Hay un ticket que los mantenedores de Jest no parecen pensar que justifique su inclusión en Jest y un paquete que coincide con el uso de expect , ¡pero no hace lo que me gustaría hacer! Que algo como:

 expect(f).toHaveBeenCalledWith( expect.objectContaining({ x: expect.numberCloseTo(1), y: expect.numberCloseTo(1) });

¿Hay algo así o tengo que rodar el mío?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Como ya insinuó Aleksey, necesitaba escribir mi propio comparador personalizado. Entonces, aquí va:

 declare global { namespace jest { interface Expect { numberCloseTo(expected: number, precision?: number): any; } } } expect.extend({ numberCloseTo(actual: number, expected: number, precision: number = 2) { expect(actual).toBeCloseTo(expected, precision); return { message: () => "This shouldn't happen.", pass: true }; }, });

Y así es como lo uso:

 expect(f).toHaveBeenCalledWith( expect.objectContaining<Position>({ x: expect.numberCloseTo(1, 1), y: expect.numberCloseTo(1, 1), }) );

Ampliar los emparejadores ya existentes es muy incómodo en Jest, y supongo que es por diseño . Así que tenemos que incluir un mensaje ficticio.

El TS solo declare global , etc. se puede eliminar si está utilizando Flow o JS simple.

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!