Boa noite. Tenho uma dúvida com relação ao exercício de separar uma base de dados para produção e outra para testes. Bem, aparentemente o node está fazendo essa separação. Quando digito no terminal
NODE_ENV=test node_modules/mocha/bin/mocha
as informações são cadastradas no banco de dados casadocodigo_nodejs_test. E é inserida uma informação de cada vez e depois excluída. Correto. Porém, quando executo no meu cmd:
node_modules/mocha/bin/mocha
Ele cadastra no banco casadocodigo_nodejs. Porém, tem o mesmo comportamento do outro. Mas não é isso que quero. Porque teoricamente esse seria o banco do cliente, não de testes. Quero cadastrar, mas manter o que já tinha antes. O que está dando errado?
connectionFactory.js
var mysql = require('mysql');
var createDBConnection = function(){
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 - test
var express = require('../config/express')();
var request = require('supertest')(express);
describe('#ProdutosController', function(){
beforeEach(function(done){
var conn = express.infra.connectionFactory();
conn.query("delete from produtos", function(ex,result){
if(!ex) {
done();
}
});
});
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:"um livro"})
.expect(400,done);
});
it('#cadastro de novo produto com dados validos',function(done){
request.post('/produtos')
.send({titulo:"titulo",descricao:"novo livro",preco:400})
.expect(302,done);
});
});
produtos.js - app/routes
module. exports = function(app) {
app.get("/produtos", function(req, res, next) {
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
produtosDAO.lista(function(erros,resultados){
//res.render('produtos/lista', {lista: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/form", function(req, res){
res.render('produtos/form',
{errosValidacao:{}, produto: {}});
});
app.post("/produtos", function(req, res) {
var produto = req.body;
console.log(produto);
req.assert('titulo','Titulo é obrigatório').notEmpty();
req.assert('descricao','Descrição é obrigatória').notEmpty();
req.assert('preco','Formato inválido').isFloat()
var erros = req.validationErrors();
if(erros){
//res.render('produtos/form', {errosValidacao:erros, produto:produto});
res.format({
html: function(){
//res.status(400).render('produtos/form',{errosValidacao:erros,produto:produto});
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){
//res.render('produtos/lista');
if(erros){
console.error(erros);
}
res.redirect('/produtos');
});
connection.end();
});
}