1
resposta

Validação do JEST apresenta erro

Como é o mesmo erro, somente copiei o texto de outro chamado sem repostas.

Quando executo .\node_mudules.bin\jest e o código é testado apresenta o seguinte erro:

FAIL tests/rotas/fornecedores/fornecedor.test.js classe Fornecedor × o metodo validar() retorna true (7 ms)

● classe Fornecedor › o metodo validar() retorna true

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: undefinedCOPIAR CÓDIGO

Chamei o método com uma função JS separada e de fato o retorno é undefined e não true. Não sei por que.

Meu teste: const Fornecedor = require('./api/rotas/fornecedores/Fornecedor')

const fornecedor = new Fornecedor({ empresa: 'Testes de Fornecedor', email: 'email@qualque3r.com', categoria: 'brinquedos' })

console.log(fornecedor.validar()) //Retorna undefined

Código implementado. Não fiz nenhuma alteração é a mesma versão do git.

validar () { const campos = ['empresa', 'email', 'categoria']

campos.forEach(campo => {
  const valor = this[campo]

  if (typeof valor !== 'string' || valor.length === 0) {
    throw new CampoInvalido(campo)
  }
})COPIAR CÓDIGO
} }

const Fornecedor = require('../../../api/rotas/fornecedores/Fornecedor')

describe('classe Fornecedor', () => {
  test('o metodo validar() retorna true', () => {
    const fornecedor = new Fornecedor({
      empresa: 'Testes de Fornecedor',
      email: 'email@qualque3r.com',
      categoria: 'brinquedos'
    })
    expect(fornecedor.validar()).toBe(true)
  })
})
1 resposta

Olá, Henrique! Tudo bem com você?

Peço desculpa pela demora em responder o seu tópico.

Ao analisar o seu código, percebi que você está lançando uma exceção CampoInvalido caso algum campo não seja uma "string" ou tenha um comprimento igual a zero. No entanto, se nenhum campo lançar essa exceção, o método validar() não retorna nada explicitamente, o que resulta em undefined.

Uma possível solução para esse problema é adicionar um retorno true no final do método validar(), após o forEach, para indicar que todos os campos foram validados com sucesso. Ficaria assim:

validar() {
  const campos = ['empresa', 'email', 'categoria'];

  campos.forEach(campo => {
    const valor = this[campo];

    if (typeof valor !== 'string' || valor.length === 0) {
      throw new CampoInvalido(campo);
    }
  });

  return true;
}

Dessa forma, quando todos os campos forem validados corretamente, o método validar() retornará true, como esperado no seu teste.

Espero que essa sugestão resolva o seu problema. Caso ainda tenha alguma dúvida, estou à disposição para ajudar.

Grande abraço e bons estudos!

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