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

1.1K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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