Logo

dev-resources.site

for different kinds of informations.

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

Published at
1/10/2025
Categories
javascript
programming
beginners
jest
Author
vitorrios1001
Author
13 person written this
vitorrios1001
open
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 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;
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

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);
});
Enter fullscreen mode Exit fullscreen mode

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();
    },
  };
});
Enter fullscreen mode Exit fullscreen mode

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();
});
Enter fullscreen mode Exit fullscreen mode

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.

jest Article's
30 articles in total
Favicon
Why You Hate Test Coverage
Favicon
Mockando Constantes em Testes com Jest: Um Exemplo Prático
Favicon
Taming the CI Beast: Optimizing a Massive Next.js Application (Part 1)
Favicon
Testing a GraphQL Application with Jest and SuperTest
Favicon
[Boost]
Favicon
How to write unit test in react?
Favicon
4. Testing (async) searchParams with Jest in Next 15
Favicon
3. How to setup Jest in a Next 15 project (+ eslint for testing)
Favicon
Sharding Jest tests. Harder than it should be?
Favicon
Migration from Jest to Vitest: A Real-World Experience with 2900+ Tests
Favicon
Mastering Jest: A Guide to Efficient JavaScript Testing
Favicon
Guide - Setting Up Jest for Unit Testing in a TypeScript React Project
Favicon
Testes Unitários com Jest
Favicon
5. Mocking usePathName, useSearchParams and useRouter with Jest in Next 15
Favicon
🛠️ Writing Reliable Code from the Ground Up !
Favicon
How To Test Your JavaScript Application With Jest Framework?
Favicon
Mocking with Jest and typescript - a cheatsheet
Favicon
Mastering Testing in React with Jest and React Testing Library
Favicon
Exploring Snapshot Testing in Jest: Pros and Cons
Favicon
Implementing CI with GitHub Actions Workflow
Favicon
How to write jest test cases for react component?
Favicon
Testing LLM Applications: Misadventures in Mocking SDKs vs Direct HTTP Requests
Favicon
Creating tests in real database with NestJS, TypeORM and PostgreSQL
Favicon
Let’s Make Jest Run Much Faster
Favicon
Testing and Debugging: Basic Tools and Techniques for Effective Full-Stack Tests
Favicon
Comparing Jest, React Testing Library, and Playwright: Testing Approaches for React Applications
Favicon
Error in Jest integration with Vue js
Favicon
Declarative Programming
Favicon
Maximize a Performance dos Seus Testes com Jest e Vitest
Favicon
Introduction to Jest: Unit Testing, Mocking, and Asynchronous Code

Featured ones: