Mockando Constantes em Testes com Jest: Um Exemplo Prático

Ao trabalhar com constantes em seus projetos, às vezes é necessário alterar seus valores para testar diferentes cenários. Porém, constantes importadas diretamente não podem ser sobrescritas facilmente, o que pode dificultar a criação de testes. Neste a…


This content originally appeared on DEV Community and was authored by Vitor Rios

Ao trabalhar com constantes em seus projetos, às vezes é necessário alterar seus valores para testar diferentes cenários. Porém, constantes importadas diretamente não podem ser sobrescritas facilmente, o que pode dificultar a criação de testes. Neste artigo, veremos como usar o Jest para mockar constantes de forma dinâmica, garantindo testes isolados e confiáveis.

Vamos criar um exemplo fictício chamado adjustImageQuality, onde ajustamos a qualidade de uma imagem dependendo se estamos em um ambiente de produção.

Implementação

Arquivo constants.js

Definimos uma constante chamada IS_PRODUCTION que indica se estamos em um ambiente de produção:

// constants.js
export const IS_PRODUCTION = false;

Arquivo adjustImageQuality.js

Agora, criamos a função adjustImageQuality. Ela altera a qualidade da imagem apenas se o sistema estiver em produção:

// adjustImageQuality.js
import { IS_PRODUCTION } from "./constants";

export default function adjustImageQuality(img) {
  if (IS_PRODUCTION) {
    img.quality = 100; // Qualidade máxima em produção
  } else {
    img.quality = 50; // Qualidade reduzida em desenvolvimento
  }

  return img;
}

Escrevendo os Testes

Queremos testar o comportamento de adjustImageQuality para os dois cenários: produção (IS_PRODUCTION = true) e desenvolvimento (IS_PRODUCTION = false).

Arquivo adjustImageQuality.test.js

Utilizamos o Jest para mockar o valor de IS_PRODUCTION dinamicamente. O segredo é usar jest.mock e sobrescrever a constante com um getter personalizado.

// adjustImageQuality.test.js
import adjustImageQuality from "./adjustImageQuality";

// Mock para a constante IS_PRODUCTION
const mockIsProduction = jest.fn();

jest.mock("./constants", () => {
  const constants = jest.requireActual("./constants");
  return {
    ...constants,
    get IS_PRODUCTION() {
      return mockIsProduction();
    },
  };
});

beforeEach(() => {
  mockIsProduction.mockClear(); // Limpa os mocks antes de cada teste
});

test("sets image quality to 100 in production", () => {
  // Configura o mock para retornar true (produção)
  mockIsProduction.mockReturnValue(true);

  const img = { quality: 0 };

  const result = adjustImageQuality(img);

  expect(result.quality).toEqual(100);
});

test("sets image quality to 50 in development", () => {
  // Configura o mock para retornar false (desenvolvimento)
  mockIsProduction.mockReturnValue(false);

  const img = { quality: 0 };

  const result = adjustImageQuality(img);

  expect(result.quality).toEqual(50);
});

Explicação do Mock

1. Criando o Mock

Utilizamos o jest.mock para interceptar o módulo constants. Dentro dele, usamos o jest.requireActual para obter as exportações reais e adicionamos um getter para a constante IS_PRODUCTION.

jest.mock("./constants", () => {
  const constants = jest.requireActual("./constants");
  return {
    ...constants,
    get IS_PRODUCTION() {
      return mockIsProduction();
    },
  };
});

2. Mockando o Valor de IS_PRODUCTION

Dentro de cada teste, usamos mockReturnValue para simular diferentes valores para IS_PRODUCTION:

  • mockIsProduction.mockReturnValue(true) para produção.
  • mockIsProduction.mockReturnValue(false) para desenvolvimento.

3. Limpeza com mockClear

Antes de cada teste, limpamos o estado do mock para garantir que ele não interfira nos outros testes:

beforeEach(() => {
  mockIsProduction.mockClear();
});

Conclusão

Este padrão de mock para constantes permite que você controle dinamicamente valores usados na lógica de sua aplicação, garantindo testes isolados e confiáveis. Ele é especialmente útil quando você precisa testar comportamentos baseados em variáveis globais, configurações ou estados do sistema.

Com essa abordagem, você consegue cobrir cenários complexos sem comprometer a estrutura do seu código ou adicionar dependências externas desnecessárias.


This content originally appeared on DEV Community and was authored by Vitor Rios


Print Share Comment Cite Upload Translate Updates
APA

Vitor Rios | Sciencx (2025-01-10T18:38:36+00:00) Mockando Constantes em Testes com Jest: Um Exemplo Prático. Retrieved from https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/

MLA
" » Mockando Constantes em Testes com Jest: Um Exemplo Prático." Vitor Rios | Sciencx - Friday January 10, 2025, https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/
HARVARD
Vitor Rios | Sciencx Friday January 10, 2025 » Mockando Constantes em Testes com Jest: Um Exemplo Prático., viewed ,<https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/>
VANCOUVER
Vitor Rios | Sciencx - » Mockando Constantes em Testes com Jest: Um Exemplo Prático. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/
CHICAGO
" » Mockando Constantes em Testes com Jest: Um Exemplo Prático." Vitor Rios | Sciencx - Accessed . https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/
IEEE
" » Mockando Constantes em Testes com Jest: Um Exemplo Prático." Vitor Rios | Sciencx [Online]. Available: https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/. [Accessed: ]
rf:citation
» Mockando Constantes em Testes com Jest: Um Exemplo Prático | Vitor Rios | Sciencx | https://www.scien.cx/2025/01/10/mockando-constantes-em-testes-com-jest-um-exemplo-pratico/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.