Boa tarde. Estou com uma dúvida neste exercício. Eu segui o passo-a-passo dele até aqui e quando faço o teste de produtos válidos ele envia uma mensagem de ok e cadastra o produto no banco de dados. Porém, na hora do teste de produtos inválidos, aparece a mensagem:
1) #ProdutosController #cadastro de novo produto com dados invalidos:
Error: expected 400 "Bad Request", got 200 "OK"
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:1537:8)
No entanto, o produto inválido não é cadastrado no banco, o que é o correto. A mensagem que ele deveria retornar neste caso não seria o erro 400? No entanto, a impressão que eu tenho é que ele retorna 200.
Este é o meu código de cadastro de produtos: produtos.js (app routes)
module. exports = function(app) {
app.get("/produtos", function(req, res) {
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
produtosDAO.lista(function(erros,resultados){
//res.render('produtos/lista', {lista:resultados});
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.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');
console.log(erros)
res.redirect('/produtos');
});
connection.end();
});
}
produtos.js (test)
var express = require('../config/express')();
var request = require('supertest')(express);
describe('#ProdutosController', function(){
it('listagem json', function(done){
//console.log("Teste de verificação de listagem de json");
/*var configuracoes = {
hostname: 'localhost',
port:3000,
path: '/produtos',
headers: {
'Accept':'application/json'
}
};
http.get(configuracoes,function(res){
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-type'],'application/json; charset=utf-8');
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:"titulo",descricao:"novo livro",preco:200})
.expect(302,done);
});
});