Neste post vamos observar como é interessante irmos testando cada rota de nossa API REST à medida que a mesma é desenvolvida, através do módulo Mocha do Node.js que nos permite realizar testes assíncronos de maneira fácil.
Para tanto, vamos utilizar os seguintes módulos, além do Mocha:
- chai, para asseveração (assertion) e
- request, para fazermos as requisições para as rotas
Primeiramente é importante que tenhamos o Mocha instalado de forma global (indicado pelo flag -g do comando npm install):
npm install -g mocha
Agora vamos criar o projeto:
express teste-unidade-mocha
cd teste-unidade-mocha
Instale os módulos definidos em package.json
npm install
Vamos instalar os outros módulos necessários:
npm install mocha chai request --save-dev
Modifique o arquivo app.js para que o mesmo fique desta forma:
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
var router = express.Router();
router.get('/produtos', function(req, res) {
var produtos = [
{
id: 1,
descricao: "Produto 1",
categoria: 10
},
{
id: 2,
descricao: "Produto 2",
categoria: 11
},
{
id: 3,
descricao: "Produto 3",
categoria: 12
}
];
res.json(produtos);
});
router.post('/produtos', function(req, res, next) {
/* A forma como salvaríamos o produto no banco
var produto = new Produto(req.body);
produto.save(function(err, produto) {
if(err)
next(err); */
res.json({mensagem: "salvo com sucesso", erro: false});
//});
});
app.use('/', router);
module.exports = app;
Foram criadas duas rotas, uma que retorna uma lista de produtos e outra que "insere" um produto no banco. São estas rotas que vamos testar.
Crie um diretório na raiz da aplicação chamado test (por padrão é neste diretório que o Mocha procura os testes a serem executados), e dentro dele um arquivo chamado teste.js com o seguinte conteúdo:
var assert = require('chai').assert;
var request = require('request');
var url = "http://localhost:3000/produtos";
describe("Testando a API", function() {
it("deve retornar 3 produtos", function(done) {
request.get(url, function(err, res, body) {
// Foi retornada a quantidade correta de produtos?
assert.equal(JSON.parse(res.body).length, 3);
// Ja que estamos fazendo uma chamada assíncrona devemos nos assegurar que o Mocha vai aguardar o término da mesma chamando o callback "done".
done();
});
});
it("deve salvar um produto no banco", function(done) {
request.post(url, {id:4, descricao:"Produto 4", categoria:100}, function(err, res, body) {
// Houve algum erro ao tentar inserir o produto?
assert.equal(JSON.parse(res.body).erro, false);
// Ja que estamos fazendo uma chamada assíncrona devemos nos assegurar que o Mocha vai aguardar o término da mesma chamando o callback "done".
done();
});
});
});
Na pasta raiz do projeto digite:
npm start
Abra outro terminal, navegue até o diretório do projeto e digite:
mocha
Vamos simular um caso de erro.
No arquivo app.js, na rota post, altere o objeto passado para res.json() para que a propriedade erro seja true:
res.json({mensagem: "salvo com sucesso", erro: true});
Reinicie o servidor (npm start) e novamente digite:
mocha
E desta vez o teste falha.
Espero que este post tenha sido útil.
Abraço.
Nenhum comentário:
Postar um comentário