Olá Marco,
Meu ConnectionFactory está como abaixo, e mesmo que direcione apenas para o banco casadocodigo_nodejs, ocorre o mesmo problema:
var mysql = require('mysql');
function createDBConnection(){
//if(!process.env.NODE_ENV) {
if(process.env.NODE_ENV != "test") {
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;
}
Não se se interefere alguma coisa, mas no meu \Estudos\Alura\casadocodigo\package.json, está assim:
{
"name": "casadocodigo",
"version": "1.0.0",
"description": "Casa do Código",
"main": "index.js",
"scripts": {
"start": "set NODE_ENV=test node node_modules/mocha/bin/mocha",
"test": "mocha"
},
"author": "Marcos",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"ejs": "^2.6.1",
"express": "^4.16.3",
"express-load": "^1.1.16",
"express-validator": "^5.2.0",
"mysql": "^2.15.0"
},
"devDependencies": {
"mocha": "^5.2.0",
"nodemon": "^1.17.4",
"supertest": "^3.1.0"
}
}
Já a programação dos testes ficou assim:
var express = require('../config/express')(); // declarou um objeto express e carregou - invocando a function "()"
var request = require('supertest')(express); // passou toda configuração do express que faz o carga do servidor (em express)
describe('ProdutosController',function(){
// antes de executar o teste, vai executar uma série de processos que podem ser programados
beforeEach(function(done){
var conn = express.infra.connectionFactory();
conn.query("delete from produtos", function(ex, result){
if(!ex) {
done();
}
});
});
it('listagem json',function(done){ // o done indica o inicio das requisições q serao passadas (de teste)
request.get('/produtos') // fazendo um get na rota "produtos"
.set('Accept','application/json') // verifica se esta recebendo um json
.expect('Content-Type',/json/) // verifica o Content-Type
.expect(200,done); // verifica o status retornado e o "done" indica que o fim das requisições podendo devolver o retorno
});
it('#cadastro de novo produto com dados inválidos', function(done){
request.post('/produtos')
.send({titulo:"", descricao:"novo livro"}) // passando os argumentos q serao usados para o post de teste
.expect(302, done); // seria 400, mas como existe um redirecionamento o status 302 que indica q está tudo ok e passa o done para finalização
});
it('#cadastro de novo produto com preço', function(done){
request.post('/produtos')
.send({titulo:"xxxxx", descricao:"novo livro", preco:20.50}) // passando os argumentos q serao usados para o post de teste
.set('Accept','application/json') // verifica se esta recebendo um json
.set('Content-Type','application/json') // verifica se esta recebendo um json
.expect(302, done); // espera o status 302 que é teste experado
});
});