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

1.1K
Views
Cómo burlarse de un constructor como new Date()

Tengo un método que depende de la new Date para crear un objeto de fecha y luego lo manipula. Estoy probando que la manipulación funciona como se esperaba, por lo que necesito comparar la fecha devuelta con la fecha esperada. Para hacer eso, necesito asegurarme de que la new Date devuelva el mismo valor en la prueba y en el método que se está probando. ¿Cómo puedo hacer eso?

¿Hay alguna manera de simular realmente el valor de retorno de una función constructora?

Podría crear un módulo que se requiera con una función que proporcione un objeto de fecha y se pueda burlar. Pero eso parece una abstracción innecesaria en mi código.

una función de ejemplo para ser probada...

 module.exports = { sameTimeTomorrow: function(){ var dt = new Date(); dt.setDate(dt + 1); return dt; } };

¿Cómo me burlo del valor de retorno de new Date() ?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Desde jest 26, puede usar la implementación 'moderna' de fakeTimers ( vea el artículo aquí ) que admite el método jest.setSystemTime .

 beforeAll(() => { jest.useFakeTimers('modern'); jest.setSystemTime(new Date(2020, 3, 1)); }); afterAll(() => { jest.useRealTimers(); });

Tenga en cuenta que 'modern' será la implementación predeterminada de la versión 27 de jest.

Consulte la documentación de setSystemTime aquí .

over 4 years ago · Santiago Trujillo Report

0

Actualización : esta respuesta es el enfoque para jest < version 26 vea esta respuesta para las versiones recientes de jest .


Puede burlarse de un constructor como new Date() usando jest.spyOn como se muestra a continuación:

 test('mocks a constructor like new Date()', () => { console.log('Normal: ', new Date().getTime()) const mockDate = new Date(1466424490000) const spy = jest .spyOn(global, 'Date') .mockImplementation(() => mockDate) console.log('Mocked: ', new Date().getTime()) spy.mockRestore() console.log('Restored: ', new Date().getTime()) })

Y la salida se parece a:

 Normal: 1566424897579 Mocked: 1466424490000 Restored: 1566424897608

Consulte el proyecto de referencia en GitHub .

Nota: si está utilizando TypeScript y encuentra un error de compilación, el Argument of type '() => Date' is not assignable to parameter of type '() => string'. Type 'Date' is not assignable to type 'string' . En este caso, una solución alternativa es usar la biblioteca de fechas falsas , que se puede usar para cambiar cuándo es "ahora". Vea esta pregunta para más detalles.

over 4 years ago · Santiago Trujillo Report

0

Puede usar spyOn de jasmine (Jest está construido sobre jasmine) para simular el prototipo de Date para getDate de la siguiente manera:

 spyOn(Date.prototype, 'setDate').and.returnValue(DATE_TO_TEST_WITH);

SpyOn también se limpiará por sí mismo y solo durará el alcance de la prueba.

over 4 years ago · Santiago Trujillo 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!