1
resposta

[Dúvida] Como testar erro?

 test("Deve lançar erro quando texto for vazio.", () => {
        const texto = "";
        const k = 2;

        const resultado = golombService.encode(texto, k);

        expect(() => {
            golombService.encode(texto, k);
        }).toThrow(ErroValidacao);

        expect(() => {
            golombService.encode(texto, k);
        }).toThrow("O campo texto é obrigatório!");
    });

O segundo "expect", caso eu mude a mensagem vai dar erro no teste. É com deixar hard code mesmo ou tem outra forma melhor?

1 resposta

Oi, Luidi! Que bom ver você praticando testes unitários, esse cuidado com o comportamento do código faz muita diferença na qualidade do software.

Manter mensagens de erro diretamente no teste (hardcoded) pode causar problemas de manutenção, pois qualquer ajuste gramatical na classe de serviço quebraria o teste, mesmo que a lógica continuasse correta.

Pra resolver isso, uma abordagem interessante é centralizar essas mensagens. Se você utiliza uma constante ou um objeto de mensagens no seu código de produção, pode importar esse mesmo objeto no seu arquivo de teste.

Uma forma de organizar seu teste:

  1. No arquivo da lógica (ex: golombService.js), defina as mensagens:
    const MENSAGENS_ERRO = {
    TEXTO_OBRIGATORIO: "O campo texto é obrigatório!"
    };

  2. No seu teste, você importa e utiliza essa referência:
    test("Deve lançar erro quando texto for vazio.", () => {
    const texto = "";
    const k = 2;

    expect(() => {
    golombService.encode(texto, k);
    }).toThrow(ErroValidacao);

    expect(() => {
    golombService.encode(texto, k);
    }).toThrow(MENSAGENS_ERRO.TEXTO_OBRIGATORIO);

});

se o texto da mensagem precisar mudar no futuro, você altera em apenas um lugar e o teste continua passando.

Outra dica: notei que no seu exemplo você chamou golombService.encode(texto, k) fora do expect logo no início. Se essa linha disparar o erro, o teste será interrompido antes de chegar nas verificações. Para testar exceções com Jest, basta manter a chamada apenas dentro da função anônima do expect, como você fez nos blocos seguintes.

Espero que isso ajude a deixar seus testes mais flexíveis. Continue com os bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!