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

Executando com o supertest

Opa galera, beleza? Então... eu havia executado o código igual ao do professor, segue o código:

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

describe('#ProdutosController',function(){
    it('#listagem json', function(done){
        request.get('/produtos')
        .set('Accept','application/json')
        .expect('Content-Type',/json/)
        .expect(200,done);
    });
});

Porém ao executar no terminal

node node_modules/mocha/bin/mocha

apareceu este erro:

 #ProdutosController
    1) #listagem json


  0 passing (2s)
  1 failing

  1) #ProdutosController
       #listagem json:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (C:\Users\rodri\Dropbox\backup\Estudo\Alura\Node.js\casadocodigo\test\produtos.js)

Não sei bem qual o erro, mas fiz a seguinte alteração

...
.expect(200);
done();

e funcionou corretamente, porém, gostaria de saber mais sobre isso... qual o motivo de ter aceitado o done fora do que dentro dos parâmetros?

3 respostas

Kendy.

No primeiro código era pra funcionar normalmente.

Testa executar da seguinte forma:

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

describe('#ProdutosController',function(){
    it('#listagem json', function(done){
        request.get('/produtos')
        .set('Accept','application/json')
        .expect('Content-Type',/json/)
        .expect(200,functionn() {
        done();
    });
    });
});

Não funcionou e quando eu coloco o done da segunda forma fica tudo errado em relação as validações.

De acordo com a seguinte alteração com o :

.expect(200,function(){
    done();
});

O terminal deu erro:

#ProdutosController
    1) #listagem json
    2) #cadastro de novo produto com dados invalidos
    3) #cadastro de novo produto com dados validos


  0 passing (6s)
  3 failing

  1) #ProdutosController
       #listagem json:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (C:\Users\rodri\Dropbox\backup\Estudo\Alura\Node.js\casadocodigo\test\produtos.js)


  2) #ProdutosController
       #cadastro de novo produto com dados invalidos:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (C:\Users\rodri\Dropbox\backup\Estudo\Alura\Node.js\casadocodigo\test\produtos.js)


  3) #ProdutosController
       #cadastro de novo produto com dados validos:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (C:\Users\rodri\Dropbox\backup\Estudo\Alura\Node.js\casadocodigo\test\produtos.js)
solução!

O que aconteceu é que eu não retornei o objeto express:

Código antigo:

var express = require('../config/express');

Código atual:

var express = require('../config/express')();

Achei que era por que o mocha pediu alguma atualização, mas não era, atualizei e mesmo assim continuava o problema.

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