DEV Community

Anderson Malheiro de Carvalho
Anderson Malheiro de Carvalho

Posted on

Testando datas mais facilmente com Jest

Quem desenvolve em Javascript | Typescript (e outras linguagens também 😜) sabe a dor de cabeça que é trabalhar com datas.

Uma coisa é certa, do juninho ao sênior em algum momento você vai precisar formatar uma data (e não vai saber 😬) ou vai ficar (muito) estressado porque o diabo da data que você criou está ficando com 3 horas a menos (kkk).

O primeiro problema é normal. Já o segundo se deve a forma como o Node trabalha com timezones. Nesse caso, ao criar um objeto Date com o comando new Date('2022-05-21') e tentar utilizar algum método como .toString(), o Node vai trazer esse valor acrescido (ou subtraído) do valor timezone da nossa máquina (normalmente aqui no Brasil seria de -3 horas). Por isso ocorre de criarmos uma data e ao tentarmos exibí-la, o valor retornado ser a data do dia anterior às 21h.

Exemplo:

const date = new Date('2022-05-21')

date.toString() // deveria retornar Sat May 21 2022 00:00:00
// mas retorna Fri May 20 2022 21:00:00
Enter fullscreen mode Exit fullscreen mode

Para resolver esse problema na execução de testes com Jest e evitar programações alternativas 🤭, podemos fazer uma simples configuração que lhe salvará vários fios de cabelo.

Vamos lá. Primeiramente precisamos criar um arquivo de configuração global para o jest (não é o jest.config). O nome não importa mas nesse exemplo vamos chamá-lo de globalJestSetup.ts e ele terá uma simples função exportada como default.

globalJestSetup.ts

Nesse arquivo estamos simplesmente dizendo para o Jest sempre utilizar a timezone UTC, assim ao trabalhar com datas não haverá o problema de termos o valor diferente dependendo da timezone.

Feito isso agora só precisamos adicionar esse arquivo nas configurações do Jest (no arquivo jest.config) como mostrado na imagem abaixo, utilizando o atributo globalSetup:

jest.config.ts

Lembrando que o nome que você deu ao arquivo deve ser igual ao usado na configuração do Jest.

E é basicamente isso. Agora ao fazer seus testes, as datas sempre terão o valor que você esperava hehe, independente do ambiente em que eles sejam executados.

Bônus:
Você pode adicionar um teste que verifica se essa configuração funcionou realmente:

timezone.test.ts

Top comments (2)

Collapse
 
victoriabispo profile image
Victoria Ricarte Bispo Beserra

Amei o artigo!! Simples, divertido e direto ao ponto. Você já pensou em escrever sobre como fazer testes com Jest do zero???

Collapse
 
andersonmalheiro profile image
Anderson Malheiro de Carvalho

Obrigado 🥰. Já venho pensando nessa ideia, vou providenciar um post sobre isso sim (ou uma série de posts 👀)