9
respostas

[Aula 7 - Tópico 8] Erro no teste de cadastro de dados inválidos

Meu teste de cadastro de produto com dados inválidos está falhando. Segue a mensagem de erro:

O código do teste em test/produtos.js está assim:

E o código da validação em routes/produtos.js está assim:

Alguém saberia indicar o motivo do erro? Talvez haja alguma pista na mensagem de deprecated, mas não tenho certeza:

(node:9964) DeprecationWarning: req.validationErrors() may be removed in a future version. Use req.getValidationResult() instead.

9 respostas

Quais as versões do seu express-validator, express e supertest? Poste o seu package.json!

Ah, seria legal saber a versão do Node também...

Versão do Node: v6.11.2.

Package.json:

Parece que você não usou o --save para o express-validator.

Creio que você fez o app.use(expressValidator()) em custom/express, se não ocorreria erro na linha do assert.

Estou exatamente com as mesmas versões e o teste roda normalmente, com a validação retornando o status 400.

{
  "name": "casadocodigo",
  "version": "1.0.0",
  "description": ""
  "engines": {
    "node": "6.11.2"
  },
  "directories": {
    "test": "test"
  },
  "main": "index.js",
  "scripts": {
    "start": "node server",
    "test": "mocha --recursive"
  },
  "author": "alexandreaquiles",
  "license": "ISC",
  "dependencies": {
    "body-parser": "1.17.2",
    "ejs": "2.5.7",
    "express": "4.15.3",
    "express-load": "1.1.16",
    "express-validator": "^3.2.1",
    "mysql": "2.14.1",
    "socket.io": "2.0.3"
  },
  "devDependencies": {
    "mocha": "3.5.0",
    "supertest": "3.0.0"
  }
}

Caro Alexandre, eu agora me recordei que realmente não tinha usado o --save na instalação de alguma coisa, só não me lembrava o quê... :)

Como as coisas foram funcionando normalmente até então, acabei esquecendo.

Parabéns pela dedução, e obrigado!

E para consertar o erro, basta instalar de novo o express-validator com o --save ? Ou há algo mais a ser feito?

Hmmm... O --save não vai afetar no funcionamento.

O que importa é a versão da biblioteca no seu node_modules. E, pelo jeito, ela está lá!

O --save apenas joga no package.json. Aí, se algum colega for iniciar no projeto ou pegar uma máquina nova, ele pode dar um npm install e pegar versões compatíveis da biblioteca. Também vale pra fazer deploy em produção e baixar as bibliotecas.

Aliás, vale a pena estudar o que significa o ^ do ^4.15.3. Basicamente, é o mesmo que 4.x. Referência: https://docs.npmjs.com/getting-started/semantic-versioning

Entendi. Então, forçar uma reinstalação do express-validator usando o --save não seria a solução para o problema.

Bom, abri agora o arquivo package.json do express-validator (..\node-modules\express-validator\package.json). No código, há a indicação da versão, que tudo indica ser semelhante à sua:

A propósito, não entendi o que você quis dizer quando falou que "Creio que você fez o app.use(expressValidator()) em custom/express, se não ocorreria erro na linha do assert."

Que eu me lembre, fiz o app.use(expressValidator() no arquivo express.js, presente no diretório ../casadocodigo/config/express.js, cujo código está exibido abaixo:

Quando digo que iria dar o erro no assert, é lá na rota, nas linhas:

req.assert('titulo', 'Título deve ser preenchido').notEmpty();
req.assert('preco', 'Preço deve ser um número').isFloat();

Se você não tivesse feito o app.use(expressValidator()), ocorreria:

TypeError: req.assert is not a function

É o express-validator que coloca esse método assert no objeto do request.

A diferença que vejo é que estou usando Linux (Ubuntu Trusty 14.04) e você o Windows.

Você tem seu código exato em um repositório público do git pra eu testar por aqui?

Alexandre, não coloquei esse código no git, mas vou providenciar.