2017-08-14 40 views
0

我試圖使用json模式來驗證api的json。當使用ajv驗證json模式時獲取錯誤類型/值

我找到了ajv庫,它似乎是node.js最流行的。

剛開的基礎知識,我定義我的架構爲

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

export default viewSchema; 

我然後將其導入到我的驗證

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; 

,並使用摩卡(與摩卡奇諾)測試輸出

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'); 
    }); 
}); 

遵循從ajv github page的指示我期望我的測試失敗,因爲類型要求d是一個字符串,我提供了一個數字。但是我從ajv.errorsText()得到的響應是No Errors,它應該提供一個錯誤。

似乎很簡單,我做錯了什麼?

回答

2

您需要將錯誤傳遞給ajv.errorsText()

ajv.errorsText(validate.errors) 

沒有參數,如果你使用的方法ajv.validate它會返回錯誤文本。

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

+0

謝謝,主文件說,'如果執行console.log(ajv.errorsText())(有效!);'所以我與打算。 – pedalpete

+0

是的,在它使用ajv.validate的情況下。需要在前面的示例中添加errorsText。 – esp