2017-08-14 3 views
0

J'essaie d'utiliser le schéma json pour valider le json d'un API.Obtenir le type/la valeur d'erreur lors de la validation du schéma json avec ajv

J'ai trouvé la bibliothèque ajv, qui semble être la plus populaire pour node.js.

qu'obtenir la base, j'ai défini mon schéma comme

const viewSchema = { 
    "type": "object", 
    "properties":{ 
     "title": {"type": "string"} 
    } 
} 

export default viewSchema; 

j'importer puis dans mon validateur

import Ajv from 'ajv'; 

import viewSchema from './viewSchema'; 
const ajv = Ajv({allErrors: true}); 
let validate = ajv.compile(viewSchema); 

const validateView = viewJson => { 
    var isValid = validate(viewJson); 
    console.log('------ text',ajv.errorsText(), isValid) 
    if(isValid) return true; 
    return ajv.errorsText(); 
} 

export default validateView; 

et en utilisant mocha (avec mochaccino) tester la sortie

describe('validate view',() => { 
    it('should error if title is not a string',() => { 
     console.log('-----------',validateView({"title":122})) 
     expect(validateView({"title":122}).errors).toContain('should be string'); 
    }); 
}); 

en suivant les instructions du ajv github page Je m'attends à ce que mon test échoue selon le type d est une chaîne et j'ai fourni un nombre. Mais la réponse que je reçois de ajv.errorsText() est No Errors où il devrait fournir une erreur.

Cela semble si simple, qu'est-ce que je fais mal?

Répondre

2

Vous devez transmettre des erreurs à ajv.errorsText():

ajv.errorsText(validate.errors) 

Sans paramètre, il retournerait texte erreurs si vous utilisez la méthode ajv.validate.

Voir https://github.com/epoberezkin/ajv#errorstextarrayobject-errors--object-options---string

+0

Merci, la documentation principale dit 'si console.log (ajv.errorsText()) (valide!);' Donc je voulais en venir. – pedalpete

+0

oui, dans le cas où il utilise ajv.validate. Besoin d'ajouter des erreurs Texte à l'exemple précédent. – esp