Ao tentar realizar o teste de inclusão de produtos apareceu o seguinte erro: ReferenceError: D:\casadocodigo\app\views\produtos\lista.ejs:10 8|
10| <%for(var i=0;i 11|
lista is not defined
verifiquei que realmente no teste não é passado o parametro lista, porem como ele deveria ter sido chamado pela rota não estendi o que pode estar acontecendo, abaixo segue os códigos do teste, produto.js e do lista.ejs
teste
var express = require('../config/express')();
var request = require('supertest')(express);
var DatabaseCleaner = require('database-cleaner');
var databaseCleaner = new DatabaseCleaner('mysql');
describe('#ProdutosController', function() {
beforeEach(function(done) {
databaseCleaner.clean(express.infra.connectionFactory(), function(){
done();
});
});
after(function(done) {
databaseCleaner.clean(express.infra.connectionFactory(), function(){
done();
});
});
it('#listagem de produtos json', function (done) {
request.get('/produtos')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200,done)
});
it('#listagem de produtos html', function (done) {
request.get('/produtos')
.expect('Content-Type', /html/)
.expect(200,done)
});
it('#cadastro de novo produto com dados invalidos',function(done){
request.post('/produtos')
.send({titulo:"",descricao:"novo livro"})
.expect(400)
.expect(function(res) {
if (true)
return console.log('Status esperado: 400');
})
.end(function(err, res){
done(err);
});
});
it('#cadastro de novo produto com dados validos',function(done) {
request.post('/produtos')
.send({titulo: "titulo", descricao: "novo livro", preco: 20.50})
.expect(302)
.expect(function (res) {
if (true)
return console.log('Status esperado: 302');
})
.end(function (err, res) {
done(err);
});
});
});
produto.js
module.exports = function (app) {
app.get('/produtos' , function listaProdutos(req, res) {
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
produtosDAO.lista(function (erros, 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',{validationErrors:{}, produto:{}});
});
app.post("/produtos",function(req,res) {
var produto = req.body;
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
req.assert('titulo', 'Titulo deve ser preenchido').notEmpty();
req.assert('preco', 'Formato inválido').isFloat();
var errors = req.validationErrors();
if(errors){
res.format({
html: function () {
res.status(400).render('produtos/lista',{validationErrors:errors, produto: produto});
},
json: function () {
res.status(400).json(errors);
}
});
return;
}
produtosDAO.salva(produto,function(erros,resultado){
res.redirect("/produtos");
});
connection.end();
});
}
e lista.ejs
<html>
<body>
<table border="1px">
<tr>
<td>Id</td>
<td>Titulo</td>
<td>Descrição</td>
<td>Preço</td>
</tr>
<%for(var i=0;i<lista.length;i++) {%>
<tr>
<td><%=lista[i].id%></td>
<td><%=lista[i].titulo%></td>
<td><%=lista[i].descricao%></td>
<td><%=lista[i].preco%></td>
</tr>
<%}%>
</table>
</body>
</html>