Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Nao importa o que altere sempre da successo

Não importa o que eu altere nos resultados experados, o supertest sempre retorna que os testes passaram com sucesso e, se eu alterno de ".expect(200,done());" para a forma como foi descrita no curso, ocorre erro de timeout.

Não consegui descobrir até o momento o que força o sucesso dos testes.., no último caso deveria retornar falha e não retorna.

const express = require('../config/express');
const request = require('supertest')(express);

//
describe('#Produtos Controller',function(){
    it('>> Listagem JSON', function(done){
        request.get('/produtos')
        .set('Accept','application/json')
        .expect('Content-Type',/json/)
        .expect(200,done());
    });

    it('>> Cadastrar Livro(BAD REQUEST)',function(done){
        request.post('/produtos')
        .send({titulo:"",descricao:"novo livro"})
        .expect('400',done());
    });

    it('>> Cadastrar Livro(BOM REQUEST)',function(done){
        request.post('/produtos')
        .send({titulo:"novo",descricao:"novo livro",valor:"200"})
        .expect('400',done());
    });
});
2 respostas

Oi Felipe,

O mocha não tem como saber sozinho quando que o seu teste acabou de rodar. Por isso, você tem que avisar o Mocha de que o teste acabou executando a função done.

Nos casos que você postou, a função done tem que ser executada após o supertest ter terminado de verificar o status code da resposta. Para isso, o supertest tem que fazer um request, aguardar a resposta e verificar o status code. Esse processo todo é assíncrono, ou seja, só o supertest sabe quando isso tudo vai acabar. Assim, você tem que passar a função done como parâmetro para o supertest e ele se encarrega de executar ela quando acabar de fazer as coisas que tem que fazer. No seu caso você está executando a função done e passando o resultado dela como parâmetro pro expect. Você não está passando a função done em si.

O código certo fica assim:

const express = require('../config/express');
const request = require('supertest')(express);

//
describe('#Produtos Controller',function(){
    it('>> Listagem JSON', function(done){
        request.get('/produtos')
        .set('Accept','application/json')
        .expect('Content-Type',/json/)
        .expect(200, done);
    });

    it('>> Cadastrar Livro(BAD REQUEST)',function(done){
        request.post('/produtos')
        .send({titulo:"",descricao:"novo livro"})
        .expect(400, done);
    });

    it('>> Cadastrar Livro(BOM REQUEST)',function(done){
        request.post('/produtos')
        .send({titulo:"novo",descricao:"novo livro",valor:"200"})
        .expect(400, done);
    });
});
solução!

Artur obrigado pela resposta mas, quando passo a função done no expect dessa forma, como está no exemplo do curso também o mocha ocorre erro de Timeout.

Solucionei o problema seguindo o teste de acordo com as instruções do NPM.

Site. https://www.npmjs.com/package/supertest

const express = require('../config/express');
const request = require('supertest');
const app = express();

//
describe('#Produtos Controller',function(){
    it('>> Listagem JSON', function(done){
        request(app)
            .get('/produtos')
            .set('Accept', 'application/json')
            .expect('Content-Type',/json/)
            .expect(302,done);

    });

    it('>> Cadastrar Livro(BAD REQUEST)',function(done){
         request(app)
        .post('/produtos')
        .send({titulo:"",descricao:"novo livro"})
        .expect(400,done);
    });

    it('>> Cadastrar Livro(BOM REQUEST)',function(done){
        request(app)
        .post('/produtos')
        .send({titulo:"novo",descricao:"novo livro",valor:"200.00"})
        .expect(302,done);
    });
});

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software