Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

método End com callback

Olá,

eu tive um problema na validação dos testes e através do fórum achei essa solução, porém não achei uma explicação pra escrita do código dessa forma e gostaria de entender melhor. Se alguém puder explicar porque tiraram o done do expect e adicionaram o método end, ficaria grato!

it('#cadastro de um novo produto com tudo preenchido', function (done) {
        request.post('/produtos')
            .send({titulo:"novo livro",preco:20.50,descricao:"livro de teste"})
            .expect(302)
            .end(function(err,response){
                done();
            })

    });
1 resposta
solução!

Olá, Yuri!

Podemos fazer assim:

it('#cadastro de um novo produto com tudo preenchido', function (done) {
        request.post('/produtos')
            .send({titulo:"novo livro",preco:20.50,descricao:"livro de teste"})
            .expect(302, done);
    });

Perceba que não usamos done(), mas sim apenas done. Não queremos passar o resultado da chamada da função, mas a própria função.

Esse código é equivalente a usar o ende chamar a função done manualmente.

it('#cadastro de um novo produto com tudo preenchido', function (done) {
        request.post('/produtos')
            .send({titulo:"novo livro",preco:20.50,descricao:"livro de teste"})
            .expect(302)
            .end(function(err,response){
                if (err) return done(err);
                 done();
            })

    });

Observe que, se houver erro no parâmetro err, passo para a chamada da função done.

Talvez você tenha visto o seguinte post no blog: https://cursos.alura.com.br/forum/topico-teste-nao-funciona-100-31358

O erro acontecia no código:

        .expect(200,done());

Poderia ser corrigido sem a chamada da função end, apenas trocando para:

        .expect(200,done);

Assim, sem os parânteses em done, indicando que você vai passar a própria função e quem vai chamá-la é o supertest.