Chai plugin for validate JSON Schema by using ajv.
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
test
.eslintrc.js
.gitignore
.npmignore
.npmrc
.travis.yml
README.md
index.js
package.json

README.md

chai-json-schema-ajv

Build Status Coverage Status

A chai plugin for validate json schema.

This is based on ajv, a JSON schema Validator.

version ajv version json schema version
v1 4.11.8 JSON Schema draft 4
v2 5.5.2 JSON Schema draft-06
v3 6.1.1 JSON Schema draft-07

Usage

npm install chai-json-schema-ajv

Basic (jsonSchema)

const chai = require('chai')
chai.use(require('chai-json-schema-ajv'))
const expect = chai.expect

let apple = {
  name: 'foo',
  color: ['red', 'green', 'yellow'],
  value: 10
}
let schema = {
  title: 'fruit schema v0.1',
  type: 'object',
  required: ['name', 'color', 'value'],
  properties: {
    name: {
      type: 'string',
      minLength: 3
    },
    color: {
      type: 'array',
      minItems: 1,
      uniqueItems: true,
      items: {
        type: 'string'
      }
    },
    value: {
      type: 'integer',
      minimum: 5
    }
  }
}

expect(apple).to.be.jsonSchema(schema)

Basic (validJsonSchema)

const chai = require('chai')
chai.use(require('chai-json-schema-ajv'))
const expect = chai.expect

let schema = {
  title: 'valid schema',
  type: 'object',
  required: ['name'],
  properties: {
    name: {
      type: 'string',
      minLength: 3
    }
  }
}

expect(schema).to.be.validJsonSchema

With custom ajv options

const options = { ... }
chai.use(require('chai-json-schema-ajv').withOptions(options))

...
  • options will be send to ajv

Verbose

Default error message is parsed by ajv.errorsText.

...
chai.use(require('chai-json-schema-ajv')
...
expected value not match the json-schema
data.value should be integer

It will print full errors with the option {verbose: true}

...
chai.use(require('chai-json-schema-ajv').withOptions({ verbose: true }))
...
expected value not match the json-schema
[
 {
   "keyword": "type",
   "dataPath": ".value",
   "schemaPath": "#/properties/value/type",
   "params": {
     "type": "integer"
   },
   "message": "should be integer",
   "schema": "integer",
   "parentSchema": {
     "type": "integer"
   },
   "data": 1.1
 }
]

TODO

  • support browser side
  • move to es2017 async/await
  • add lint
  • send option to ajv (thanks @dimac)

License

MIT