Não sei o que pode estar acontecendo, olhei em algumas respostas do fórum e não encontrei a solução.
Criei o banco de testes, mas ele só aparece vazio, onde ele recebe a função de gravar no teste? O nome da tabela de teste deve ser a mesma da produção, pela duvida criei produtos e livros? Não aparece nada no console de erros.
ConnectionFactory
var mysql = require('mysql');
function createDBConnection(){
if(!process.env.NODE_ENV){
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;
}
produtos.js
module.exports = function(app) {
var listaProdutos = function(req,res,next){
var connection = app.infra.connectionFactory();
var produtosBanco = new app.infra.ProdutosDAO(connection);
produtosBanco.lista(function(erros, resultados){
if(erros){
return next(erros);
}
res.format({
html: function(){
res.render("produtos/lista",{lista:resultados});
},
json: function(){
res.json(resultados);
}
});
});
connection.end();
};
app.get("/produtos", listaProdutos);
app.get('/produtos/form', function(req,res){
res.render('produtos/form', {errosValidacao:{}, produto: {}});
});
app.post('/produtos', function(req,res){
var produto = req.body;
req.assert('titulo','Titulo é obrigatório').notEmpty()
req.assert('preco','Formato inválido').isFloat()
var erros = req.validationErrors();
if(erros){
console.log(erros);
res.send(erros);
return;
res.format({
html: function(){
res.status(400).render('produtos/form',{errosValidacao:erros,produto:produto});
},
json: function(){
res.status(400).json(erros);
}
});
return;
}
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
produtosDAO.salva(produto, function(erros, resultados){
console.log(erros);
res.redirect('/produtos');
});
})
}
produtos.js test
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());
});
it('#cadastro de novo produto com dados invalidos', function(done) {
request.post('/produtos')
.send({titulo:"",descricao:"novo livro"})
.expect(400,done());
});
it('#cadastro de novo produto com dados validos', function(done) {
request.post('/produtos')
.send({titulo:"node",descricao:"livro node",preco:20.50})
.expect(302,done());//302 redirect redireciona a página
});
});