1
resposta

Testes de `throw()`

Não entendi o porquê do meu método estar retornando uma promise resolvida. Se está entrando no catch não seria porque a promise foi rejeitada?

snippet da função:

async function getObjectsWithLinkFromFile(filePath) {
  try {
    const absolutePath = path.join(__dirname, filePath);
    const text = await fs.promises.readFile(absolutePath, "utf-8");

    return extractLinks(text);
  } catch (error) {
    return  chalk.red("no files found");    
  }
}

snippet do teste:

it("should throw an error whether it no specified a valid path file.", async () => {
    await expect(getObjectsWithLinkFromFile("tests/files")).rejects.toThrow("no files found");
  });

Resultado do teste: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Müller! Tudo bem?

Desculpa a demora por um retorno.

De fato, quando ocorre um erro e a promise é rejeitada, o bloco catch é executado. No entanto, o retorno dentro desse bloco catch está retornando uma string usando o pacote chalk, que é uma biblioteca para estilizar a saída no console.

No código, a função getObjectsWithLinkFromFile está retornando o resultado da função extractLinks(text), que é uma promise. Portanto, mesmo que ocorra um erro e entre no bloco catch, o retorno final da função será uma promise resolvida com o resultado de extractLinks(text).

Se quisermos que a função retorne uma promise rejeitada quando ocorrer um erro, podemos fazer isso explicitamente utilizando o construtor Promise e o método reject:

async function getObjectsWithLinkFromFile(filePath) {
  try {
    const absolutePath = path.join(__dirname, filePath);
    const text = await fs.promises.readFile(absolutePath, "utf-8");
    
    return extractLinks(text);
  } catch (error) {
    return Promise.reject("no files found");
  }
}

Dessa forma, quando ocorrer um erro, a função getObjectsWithLinkFromFile irá retornar uma promise rejeitada com a mensagem "no files found".

Espero ter ajudado. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓