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

Video 7 - Aula 10 - Banco de dados de testes vazio

Criei o banco de testes, tabela, tudo certinho. Mas ele não funciona, o teste passa mas não grava nada, nem no de testes nem no de desenvolvimento.

produtos.js

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

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

    it('#cadastro de novo produto com dados invalidos', function (done) {
        request.post('/produtos')
            .send({titulo: '', descricao: 'novo livro de teste'})
            .expect(400,done())
    });

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

produtos.js

module.exports = function(app) {

    var listaProdutos = function(req, res, next) {
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        produtosDAO.lista(function(err, results) {
            if(err){
                return next(err);
            }
            res.format({
                html: function() {
                    res.render('produtos/lista', {lista:results});
                },
                json: function() {
                    res.json(results);
                }
            });
        });

        connection.end();
    }

    app.get('/produtos', listaProdutos);

    app.get('/produtos/json', function(req, res) {
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        produtosDAO.lista(function(err, results) {
            res.json(results);
        });

        connection.end();
    });

    app.get('/produtos/form', function(req, res) {
        res.render('produtos/form', {getValidationResult:{}, produto: {}});
    });

    app.post('/produtos', function(req, res) {
        var produto = req.body;

        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        req.assert('titulo', 'Titulo deve ser preenchido').notEmpty();
        req.assert('preco','Preco deve ser um número').isFloat();

        var errors = req.getValidationResult();
        if(errors){
              res.format({
                html: function(){
                    res.status(400).render("produtos/form",{getValidationResult:errors,produto:produto});
                },
                json: function(){
                    res.status(400).send(errors);
                }
            });
            return;
        }

        produtosDAO.salva(produto, function(err, results) {
            res.redirect('/produtos');
        });

        connection.end();
    });
}

connectionFactory.js

var mysql = require('mysql');
function createDBConnection(){

    console.log('tipo de conexao:' + process.env.NODE_ENV);
    if(!process.env.NODE_ENV || process.env.node === 'dev'){
        console.log('Conexao 1 - A variavel de ambiente nao existe ou chama dev!');
        return mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'casadocodigo_nodejs'
        });
    }
    if(process.env.NODE_ENV == 'test'){
        return mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'casadocodigo_nodejs_test'
        });
    }

} 

module.exports = function(){
    return createDBConnection;
}
3 respostas

Quando retiro o () dos done() do produto.js test, recebo o erro:

1) #ProdutosController #cadastro de novo produto com dados validos:
     Error: expected 302 "Found", got 400 "Bad Request"
      at Test._assertStatus (node_modules/supertest/lib/test.js:266:12)
      at Test._assertFunction (node_modules/supertest/lib/test.js:281:11)
      at Test.assert (node_modules/supertest/lib/test.js:171:18)
      at Server.assert (node_modules/supertest/lib/test.js:131:12)
      at emitCloseNT (net.js:1549:8)
      at _combinedTickCallback (internal/process/next_tick.js:71:11)
      at process._tickCallback (internal/process/next_tick.js:98:9)

Opa Fala Icaro tudo bom? Pode fazer um teste, verificando se o valor do req.body está realmente vindo?

 app.post('/produtos', function(req, res) {
        var produto = req.body;
    console.log(produto) // Joga um console log maroto :)
solução!

Bom dia, Mario! Fiz isso e deu tudo OK no console log. Descobri que o erro estava na minha função getValidationResult. Arrumei e tá tudo ok! Muito obrigado!