Executando verificação de segurança...
4

Fala Carlos Vinicius! Muito massa seu post! Na mesma pegada de desenvolvimento testável e escrevendo uma arquitetura desacoplada, publiquei esse artigo sobre a utilização de um ORM no contexto testável e independente.
No meu desenvolvimento guiado por testes, gosto muito de utilizar o factory pattern para o gerenciamento de entradas da minha função/classe. EX:
Nesse mesmo contexto de teste de uma classe controller, gosto de configurar meu teste da seguinte maneira:

import { CreateUserController } from "./controller";

const makeHttpRequest = (props?: Partial<HttpRequest>): HttpRequest => ({
  name: "any_name",
  email: "any_email",
  password: "any_password",
  ...props,
});

test("it should return 400 if no name is provided", async () => {
  const createUserController = new CreateUserController();
  const request = makeHttpRequest({ name: undefined });
  const response = await createUserController.handle(request);
  expect(response).toEqual({
    statusCode: 400,
    body: new Error("send all required fields"),
  });

  test("it should return 200 valid data is provided", async () => {
    const createUserController = new CreateUserController();
    const request = makeHttpRequest();
    const response = await createUserController.handle(request);

    expect(response).toEqual({
      statusCode: 200,
      body: "ok",
    });
  });
});

No exemplo acima, a função makeHttpRequest monta a minha requisição com todos os parâmetros válidos, e se eu quiser sobrescrever algum parâmetro, eu passo na chamada da função, como estou fazendo no primeiro teste. Isso me ajuda a manter o teste mais legível e com menos repetições.

Da mesma maneira, no segundo teste, eu não preciso passar nenhum parâmetro, pois a função makeHttpRequest já monta a requisição com todos os parâmetros válidos.

Espero que ajude! Abraço!

Carregando publicação patrocinada...
1

Muito interessante, realmente deve ajudar muito na questão de não repetir os paramêtros a serem enviados.
Vou começar a utilizar nas minhas aplicações também, obrigado pela dica hehe.

Abração