use new with Ajv constructor in tests and examples

master
Evgeny Poberezkin 2016-06-04 21:16:11 +01:00
parent 048f2139d4
commit 6a14e347c4
11 changed files with 94 additions and 96 deletions

View File

@ -1,8 +1,6 @@
# Ajv: Another JSON Schema Validator
The fastest JSON Schema validator for node.js and browser.
Supports [v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals).
The fastest JSON Schema validator for node.js and browser. Supports [v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals).
[![Build Status](https://travis-ci.org/epoberezkin/ajv.svg?branch=master)](https://travis-ci.org/epoberezkin/ajv)
@ -101,7 +99,7 @@ The fastest validation call:
```javascript
var Ajv = require('ajv');
var ajv = Ajv(); // options can be passed, e.g. {allErrors: true}
var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true}
var validate = ajv.compile(schema);
var valid = validate(data);
if (!valid) console.log(validate.errors);
@ -316,7 +314,7 @@ During asynchronous compilation remote references are loaded using supplied func
Example:
```javascript
var ajv = Ajv({ loadSchema: loadSchema });
var ajv = new Ajv({ loadSchema: loadSchema });
ajv.compileAsync(schema, function (err, validate) {
if (err) return;
@ -368,7 +366,7 @@ Example:
* 3. es7 async functions transpiled with regenerator
*/
var ajv = Ajv();
var ajv = new Ajv();
ajv.addKeyword('idExists', {
async: true,
@ -425,7 +423,7 @@ Ajv npm package includes minified browser bundles of regenerator and nodent in d
#### Using nodent
```javascript
var ajv = Ajv({ /* async: 'es7', */ transpile: 'nodent' });
var ajv = new Ajv({ /* async: 'es7', */ transpile: 'nodent' });
var validate = ajv.compile(schema); // transpiled es7 async function
validate(data).then(successFunc).catch(errorFunc);
```
@ -436,7 +434,7 @@ validate(data).then(successFunc).catch(errorFunc);
#### Using regenerator
```javascript
var ajv = Ajv({ /* async: 'es7', */ transpile: 'regenerator' });
var ajv = new Ajv({ /* async: 'es7', */ transpile: 'regenerator' });
var validate = ajv.compile(schema); // transpiled es7 async function
validate(data).then(successFunc).catch(errorFunc);
```
@ -447,7 +445,7 @@ validate(data).then(successFunc).catch(errorFunc);
#### Using other transpilers
```javascript
var ajv = Ajv({ async: 'es7', transpile: transpileFunc });
var ajv = new Ajv({ async: 'es7', transpile: transpileFunc });
var validate = ajv.compile(schema); // transpiled es7 async function
validate(data).then(successFunc).catch(errorFunc);
```
@ -485,7 +483,7 @@ This option modifies original data.
Example:
```javascript
var ajv = Ajv({ removeAdditional: true });
var ajv = new Ajv({ removeAdditional: true });
var schema = {
"additionalProperties": false,
"properties": {
@ -582,7 +580,7 @@ Inserting defaults by reference can be faster (in case you have an object in `de
Example 1 (`default` in `properties`):
```javascript
var ajv = Ajv({ useDefaults: true });
var ajv = new Ajv({ useDefaults: true });
var schema = {
"type": "object",
"properties": {
@ -622,7 +620,7 @@ console.log(data); // [ 1, "foo" ]
Example 3 (inserting "defaults" by reference):
```javascript
var ajv = Ajv({ useDefaults: 'shared' });
var ajv = new Ajv({ useDefaults: 'shared' });
var schema = {
properties: {
@ -665,7 +663,7 @@ __Please note__: if you pass a scalar value to the validating function its type
Example:
```javascript
var ajv = Ajv({ coerceTypes: true });
var ajv = new Ajv({ coerceTypes: true });
var schema = {
"type": "object",
"properties": {
@ -690,7 +688,7 @@ See [Coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md)
## API
##### Ajv(Object options) -> Object
##### new Ajv(Object options) -> Object
Create Ajv instance.

View File

@ -10,7 +10,7 @@ describe('Ajv', function () {
var ajv;
beforeEach(function() {
ajv = Ajv();
ajv = new Ajv();
});
it('should create instance', function() {

View File

@ -98,5 +98,5 @@ function getAjvInstances(opts) {
function getAjv(opts){
try { return Ajv(opts); } catch(e) {}
try { return new Ajv(opts); } catch(e) {}
}

View File

@ -20,7 +20,7 @@ function _getAjvInstances(opts, useOpts) {
var instances = _getAjvInstances(opts, useOpts)
, instances1 = _getAjvInstances(opts, useOpts1);
return instances.concat(instances1);
} else return [ Ajv(useOpts) ];
} else return [ new Ajv(useOpts) ];
}

View File

@ -50,7 +50,7 @@ describe('compileAsync method', function() {
beforeEach(function() {
loadCallCount = 0;
ajv = Ajv({ loadSchema: loadSchema });
ajv = new Ajv({ loadSchema: loadSchema });
});
@ -201,7 +201,7 @@ describe('compileAsync method', function() {
"type": "integer",
"minimum": 2
};
var ajv = Ajv();
var ajv = new Ajv();
should.throw(function() {
ajv.compileAsync(schema, function() {
done(new Error('it should have thrown exception'));
@ -263,7 +263,7 @@ describe('compileAsync method', function() {
"a": { "$ref": "object.json" }
}
};
var ajv = Ajv({ loadSchema: badLoadSchema });
var ajv = new Ajv({ loadSchema: badLoadSchema });
ajv.compileAsync(schema, function (err, validate) {
should.exist(err);
should.not.exist(validate);

View File

@ -371,27 +371,27 @@ describe('async schemas, formats and keywords', function() {
describe('async/transpile option', function() {
it('should throw error with unknown async option', function() {
shouldThrowFunc('bad async mode: es8', function() {
Ajv({ async: 'es8' });
new Ajv({ async: 'es8' });
});
});
it('should throw error with unknown transpile option', function() {
shouldThrowFunc('bad transpiler: babel', function() {
Ajv({ transpile: 'babel' });
new Ajv({ transpile: 'babel' });
});
shouldThrowFunc('bad transpiler: [object Object]', function() {
Ajv({ transpile: {} });
new Ajv({ transpile: {} });
});
});
it('should set async option to es7 if tranpiler is nodent', function() {
var ajv1 = Ajv({ transpile: 'nodent' });
var ajv1 = new Ajv({ transpile: 'nodent' });
ajv1._opts.async .should.equal('es7');
var ajv2 = Ajv({ async: '*', transpile: 'nodent' });
var ajv2 = new Ajv({ async: '*', transpile: 'nodent' });
ajv2._opts.async .should.equal('es7');
});
});

View File

@ -140,8 +140,8 @@ describe('Type coercion', function () {
var ajv, fullAjv, instances;
beforeEach(function() {
ajv = Ajv({ coerceTypes: true, verbose: true });
fullAjv = Ajv({ coerceTypes: true, verbose: true, allErrors: true });
ajv = new Ajv({ coerceTypes: true, verbose: true });
fullAjv = new Ajv({ coerceTypes: true, verbose: true, allErrors: true });
instances = [ ajv, fullAjv ];
});
@ -263,7 +263,7 @@ describe('Type coercion', function () {
it('should update data if the schema is in ref that is not inlined', function () {
instances.push(Ajv({ coerceTypes: true, inlineRefs: false }));
instances.push(new Ajv({ coerceTypes: true, inlineRefs: false }));
var schema = {
type: 'object',

View File

@ -13,9 +13,9 @@ describe('Validation errors', function () {
});
function createInstances(errorDataPath) {
ajv = Ajv({ errorDataPath: errorDataPath, loopRequired: 21 });
ajvJP = Ajv({ errorDataPath: errorDataPath, jsonPointers: true, loopRequired: 21 });
fullAjv = Ajv({ errorDataPath: errorDataPath, allErrors: true, jsonPointers: true, loopRequired: 21 });
ajv = new Ajv({ errorDataPath: errorDataPath, loopRequired: 21 });
ajvJP = new Ajv({ errorDataPath: errorDataPath, jsonPointers: true, loopRequired: 21 });
fullAjv = new Ajv({ errorDataPath: errorDataPath, allErrors: true, jsonPointers: true, loopRequired: 21 });
}
it('error should include dataPath', function() {
@ -265,7 +265,7 @@ describe('Validation errors', function () {
it('should not validate required twice in large schemas with loopRequired option', function() {
var ajv = Ajv({ loopRequired: 1, allErrors: true });
var ajv = new Ajv({ loopRequired: 1, allErrors: true });
var schema = {
properties: {
@ -283,7 +283,7 @@ describe('Validation errors', function () {
it('should not validate required twice with $data ref', function() {
var ajv = Ajv({ v5: true, allErrors: true });
var ajv = new Ajv({ v5: true, allErrors: true });
var schema = {
properties: {

View File

@ -11,7 +11,7 @@ describe('issue #8: schema with shared references', function() {
function spec(method) {
return function() {
var ajv = Ajv();
var ajv = new Ajv();
var propertySchema = {
type: 'string',
@ -48,7 +48,7 @@ describe('issue #50: references with "definitions"', function () {
return function() {
var result;
var ajv = Ajv();
var ajv = new Ajv();
ajv[method]({
id: 'http://example.com/test/person.json#',
@ -88,7 +88,7 @@ describe('issue #182, NaN validation', function() {
var ajv;
before(function(){
ajv = Ajv();
ajv = new Ajv();
});
it('should not pass minimum/maximum validation', function() {
@ -105,7 +105,7 @@ describe('issue #182, NaN validation', function() {
});
function testNaN(schema, NaNisValid) {
var validate = Ajv().compile(schema);
var validate = new Ajv().compile(schema);
validate(NaN) .should.equal(NaNisValid);
}
});
@ -113,7 +113,7 @@ describe('issue #182, NaN validation', function() {
describe('issue #204, options schemas and v5 used together', function() {
it('should use v5 metaschemas by default', function() {
var ajv = Ajv({
var ajv = new Ajv({
v5: true,
schemas: [{id: 'str', type: 'string'}],
});

View File

@ -9,7 +9,7 @@ var Ajv = require('./ajv')
describe('Ajv Options', function () {
describe('removeAdditional', function() {
it('should remove all additional properties', function() {
var ajv = Ajv({ removeAdditional: 'all' });
var ajv = new Ajv({ removeAdditional: 'all' });
ajv.addSchema({
id: '//test/fooBar',
@ -28,7 +28,7 @@ describe('Ajv Options', function () {
it('should remove properties that would error when `additionalProperties = false`', function() {
var ajv = Ajv({ removeAdditional: true });
var ajv = new Ajv({ removeAdditional: true });
ajv.addSchema({
id: '//test/fooBar',
@ -48,7 +48,7 @@ describe('Ajv Options', function () {
it('should remove properties that would error when `additionalProperties` is a schema', function() {
var ajv = Ajv({ removeAdditional: 'failing' });
var ajv = new Ajv({ removeAdditional: 'failing' });
ajv.addSchema({
id: '//test/fooBar',
@ -87,7 +87,7 @@ describe('Ajv Options', function () {
describe('ownProperties', function() {
it('should only validate against own properties of data if specified', function() {
var ajv = Ajv({ ownProperties: true });
var ajv = new Ajv({ ownProperties: true });
var validate = ajv.compile({
properties: { c: { type: 'number' } },
additionalProperties: false
@ -103,7 +103,7 @@ describe('Ajv Options', function () {
});
it('should only validate against own properties when using patternProperties', function() {
var ajv = Ajv({ allErrors: true, ownProperties: true });
var ajv = new Ajv({ allErrors: true, ownProperties: true });
var validate = ajv.compile({
patternProperties: { 'f.*o': { type: 'integer' } },
});
@ -118,7 +118,7 @@ describe('Ajv Options', function () {
});
it('should only validate against own properties when using patternGroups', function() {
var ajv = Ajv({ v5: true, allErrors: true, ownProperties: true });
var ajv = new Ajv({ v5: true, allErrors: true, ownProperties: true });
var validate = ajv.compile({
patternGroups: {
'f.*o': { schema: { type: 'integer' } }
@ -135,7 +135,7 @@ describe('Ajv Options', function () {
});
it('should only validate against own properties when using patternRequired', function() {
var ajv = Ajv({ v5: true, allErrors: true, ownProperties: true });
var ajv = new Ajv({ v5: true, allErrors: true, ownProperties: true });
var validate = ajv.compile({
patternRequired: [ 'f.*o' ]
});
@ -152,8 +152,8 @@ describe('Ajv Options', function () {
describe('meta and validateSchema', function() {
it('should add draft-4 meta schema by default', function() {
testOptionMeta(Ajv());
testOptionMeta(Ajv({ meta: true }));
testOptionMeta(new Ajv());
testOptionMeta(new Ajv({ meta: true }));
function testOptionMeta(ajv) {
ajv.getSchema('http://json-schema.org/draft-04/schema') .should.be.a('function');
@ -165,19 +165,19 @@ describe('Ajv Options', function () {
});
it('should throw if meta: false and validateSchema: true', function() {
var ajv = Ajv({ meta: false });
var ajv = new Ajv({ meta: false });
should.not.exist(ajv.getSchema('http://json-schema.org/draft-04/schema'));
should.throw(function() { ajv.addSchema({ type: 'integer' }, 'integer') });
});
it('should skip schema validation with validateSchema: false', function() {
var ajv = Ajv();
var ajv = new Ajv();
should.throw(function() { ajv.addSchema({ type: 123 }, 'integer') });
var ajv = Ajv({ validateSchema: false });
var ajv = new Ajv({ validateSchema: false });
should.not.throw(function() { ajv.addSchema({ type: 123 }, 'integer') });
var ajv = Ajv({ validateSchema: false, meta: false });
var ajv = new Ajv({ validateSchema: false, meta: false });
should.not.throw(function() { ajv.addSchema({ type: 123 }, 'integer') });
});
@ -186,21 +186,21 @@ describe('Ajv Options', function () {
var loggedError = false;
console.error = function() { loggedError = true; logError.apply(console, arguments); }
var ajv = Ajv({ validateSchema: 'log' });
var ajv = new Ajv({ validateSchema: 'log' });
should.not.throw(function() { ajv.addSchema({ type: 123 }, 'integer') });
loggedError .should.equal(true);
console.error = logError;
var ajv = Ajv({ validateSchema: 'log', meta: false });
var ajv = new Ajv({ validateSchema: 'log', meta: false });
should.throw(function() { ajv.addSchema({ type: 123 }, 'integer') });
});
it('should validate v5 schema', function() {
var ajv = Ajv({ v5: true });
var ajv = new Ajv({ v5: true });
ajv.validateSchema({ contains: { minimum: 2 } }) .should.equal(true);
ajv.validateSchema({ contains: 2 }). should.equal(false);
var ajv = Ajv();
var ajv = new Ajv();
ajv.validateSchema({ contains: 2 }). should.equal(true);
});
@ -211,7 +211,7 @@ describe('Ajv Options', function () {
myKeyword: { type: 'boolean' }
}
};
var ajv = Ajv({ meta: meta });
var ajv = new Ajv({ meta: meta });
ajv.validateSchema({ myKeyword: true }) .should.equal(true);
ajv.validateSchema({ myKeyword: 2 }) .should.equal(false);
ajv.validateSchema({
@ -219,7 +219,7 @@ describe('Ajv Options', function () {
myKeyword: 2
}) .should.equal(true);
var ajv = Ajv();
var ajv = new Ajv();
ajv.validateSchema({ myKeyword: true }) .should.equal(true);
ajv.validateSchema({ myKeyword: 2 }) .should.equal(true);
});
@ -228,7 +228,7 @@ describe('Ajv Options', function () {
describe('schemas', function() {
it('should add schemas from object', function() {
var ajv = Ajv({ schemas: {
var ajv = new Ajv({ schemas: {
int: { type: 'integer' },
str: { type: 'string' }
}});
@ -240,7 +240,7 @@ describe('Ajv Options', function () {
});
it('should add schemas from array', function() {
var ajv = Ajv({ schemas: [
var ajv = new Ajv({ schemas: [
{ id: 'int', type: 'integer' },
{ id: 'str', type: 'string' },
{ id: 'obj', properties: { int: { $ref: 'int' }, str: { $ref: 'str' } } }
@ -255,8 +255,8 @@ describe('Ajv Options', function () {
describe('format', function() {
it('should not validate formats if option format == false', function() {
var ajv = Ajv()
, ajvFF = Ajv({ format: false });
var ajv = new Ajv()
, ajvFF = new Ajv({ format: false });
var schema = { format: 'date-time' };
var invalideDateTime = '06/19/1963 08:30:06 PST';
@ -266,8 +266,8 @@ describe('Ajv Options', function () {
});
it('should not validate formatMaximum/Minimum if option format == false', function() {
var ajv = Ajv({ v5: true, allErrors: true })
, ajvFF = Ajv({ v5: true, allErrors: true, format: false });
var ajv = new Ajv({ v5: true, allErrors: true })
, ajvFF = new Ajv({ v5: true, allErrors: true, format: false });
var schema = {
format: 'date',
@ -283,7 +283,7 @@ describe('Ajv Options', function () {
describe('formats', function() {
it('should add formats from options', function() {
var ajv = Ajv({ formats: {
var ajv = new Ajv({ formats: {
identifier: /^[a-z_$][a-z0-9_$]*$/i
}});
@ -297,15 +297,15 @@ describe('Ajv Options', function () {
describe('missingRefs', function() {
it('should throw if ref is missing without this option', function() {
var ajv = Ajv();
var ajv = new Ajv();
should.throw(function() {
ajv.compile({ $ref: 'missing_reference' });
});
});
it('should not throw and pass validation with missingRef == "ignore"', function() {
testMissingRefsIgnore(Ajv({ missingRefs: 'ignore' }));
testMissingRefsIgnore(Ajv({ missingRefs: 'ignore', allErrors: true }));
testMissingRefsIgnore(new Ajv({ missingRefs: 'ignore' }));
testMissingRefsIgnore(new Ajv({ missingRefs: 'ignore', allErrors: true }));
function testMissingRefsIgnore(ajv) {
var validate = ajv.compile({ $ref: 'missing_reference' });
@ -314,10 +314,10 @@ describe('Ajv Options', function () {
});
it('should not throw and fail validation with missingRef == "fail" if the ref is used', function() {
testMissingRefsFail(Ajv({ missingRefs: 'fail' }));
testMissingRefsFail(Ajv({ missingRefs: 'fail', verbose: true }));
testMissingRefsFail(Ajv({ missingRefs: 'fail', allErrors: true }));
testMissingRefsFail(Ajv({ missingRefs: 'fail', allErrors: true, verbose: true }));
testMissingRefsFail(new Ajv({ missingRefs: 'fail' }));
testMissingRefsFail(new Ajv({ missingRefs: 'fail', verbose: true }));
testMissingRefsFail(new Ajv({ missingRefs: 'fail', allErrors: true }));
testMissingRefsFail(new Ajv({ missingRefs: 'fail', allErrors: true, verbose: true }));
function testMissingRefsFail(ajv) {
var validate = ajv.compile({
@ -338,8 +338,8 @@ describe('Ajv Options', function () {
describe('uniqueItems', function() {
it('should not validate uniqueItems with uniqueItems option == false', function() {
testUniqueItems(Ajv({ uniqueItems: false }));
testUniqueItems(Ajv({ uniqueItems: false, allErrors: true }));
testUniqueItems(new Ajv({ uniqueItems: false }));
testUniqueItems(new Ajv({ uniqueItems: false, allErrors: true }));
function testUniqueItems(ajv) {
var validate = ajv.compile({ uniqueItems: true });
@ -352,9 +352,9 @@ describe('Ajv Options', function () {
describe('unicode', function() {
it('should use String.prototype.length with unicode option == false', function() {
var ajvUnicode = Ajv();
testUnicode(Ajv({ unicode: false }));
testUnicode(Ajv({ unicode: false, allErrors: true }));
var ajvUnicode = new Ajv();
testUnicode(new Ajv({ unicode: false }));
testUnicode(new Ajv({ unicode: false, allErrors: true }));
function testUnicode(ajv) {
var validateWithUnicode = ajvUnicode.compile({ minLength: 2 });
@ -375,8 +375,8 @@ describe('Ajv Options', function () {
describe('verbose', function() {
it('should add schema, parentSchema and data to errors with verbose option == true', function() {
testVerbose(Ajv({ verbose: true }));
testVerbose(Ajv({ verbose: true, allErrors: true }));
testVerbose(new Ajv({ verbose: true }));
testVerbose(new Ajv({ verbose: true, allErrors: true }));
function testVerbose(ajv) {
var schema = { properties: { foo: { minimum: 5 } } };
@ -398,8 +398,8 @@ describe('Ajv Options', function () {
describe('multipleOfPrecision', function() {
it('should allow for some deviation from 0 when validating multipleOf with value < 1', function() {
test(Ajv({ multipleOfPrecision: 7 }));
test(Ajv({ multipleOfPrecision: 7, allErrors: true }));
test(new Ajv({ multipleOfPrecision: 7 }));
test(new Ajv({ multipleOfPrecision: 7, allErrors: true }));
function test(ajv) {
var schema = { multipleOf: 0.01 };
@ -456,8 +456,8 @@ describe('Ajv Options', function () {
});
it('should replace undefined item with default value', function() {
test(Ajv({ useDefaults: true }));
test(Ajv({ useDefaults: true, allErrors: true }));
test(new Ajv({ useDefaults: true }));
test(new Ajv({ useDefaults: true, allErrors: true }));
function test(ajv) {
var schema = {
@ -490,15 +490,15 @@ describe('Ajv Options', function () {
describe('useDefaults: by value / by reference', function() {
describe('using by value', function() {
it('should NOT modify underlying defaults when modifying validated data', function() {
test('value', Ajv({ useDefaults: true }));
test('value', Ajv({ useDefaults: true, allErrors: true }));
test('value', new Ajv({ useDefaults: true }));
test('value', new Ajv({ useDefaults: true, allErrors: true }));
});
});
describe('using by reference', function() {
it('should modify underlying defaults when modifying validated data', function() {
test('reference', Ajv({ useDefaults: 'shared' }));
test('reference', Ajv({ useDefaults: 'shared', allErrors: true }));
test('reference', new Ajv({ useDefaults: 'shared' }));
test('reference', new Ajv({ useDefaults: 'shared', allErrors: true }));
});
});
@ -541,7 +541,7 @@ describe('Ajv Options', function () {
var ajv;
beforeEach(function() {
ajv = Ajv({ addUsedSchema: optionValue });
ajv = new Ajv({ addUsedSchema: optionValue });
});
describe('compile and validate', function() {
@ -579,7 +579,7 @@ describe('Ajv Options', function () {
var ajv;
beforeEach(function() {
ajv = Ajv({ addUsedSchema: false });
ajv = new Ajv({ addUsedSchema: false });
});
@ -647,7 +647,7 @@ describe('Ajv Options', function () {
})
function getValidate(passContext) {
ajv = Ajv({ passContext: passContext, inlineRefs: false });
ajv = new Ajv({ passContext: passContext, inlineRefs: false });
ajv.addKeyword('testValidate', { validate: storeContext });
ajv.addKeyword('testCompile', { compile: compileTestValidate });
@ -683,8 +683,8 @@ describe('Ajv Options', function () {
describe('allErrors', function() {
it('should be disabled inside "not" keyword', function() {
test(Ajv(), false);
test(Ajv({ allErrors: true }), true);
test(new Ajv(), false);
test(new Ajv({ allErrors: true }), true);
function test(ajv, allErrors) {
var format1called = false

View File

@ -165,31 +165,31 @@ describe('resolve', function () {
];
it('by default should inline schema if it doesn\'t contain refs', function() {
var ajv = Ajv({ schemas: schemas });
var ajv = new Ajv({ schemas: schemas });
testSchemas(ajv, true);
});
it('should NOT inline schema if option inlineRefs == false', function() {
var ajv = Ajv({ schemas: schemas, inlineRefs: false });
var ajv = new Ajv({ schemas: schemas, inlineRefs: false });
testSchemas(ajv, false);
});
it('should inline schema if option inlineRefs is bigger than number of keys in referenced schema', function() {
var ajv = Ajv({ schemas: schemas, inlineRefs: 3 });
var ajv = new Ajv({ schemas: schemas, inlineRefs: 3 });
testSchemas(ajv, true);
});
it('should NOT inline schema if option inlineRefs is less than number of keys in referenced schema', function() {
var ajv = Ajv({ schemas: schemas, inlineRefs: 2 });
var ajv = new Ajv({ schemas: schemas, inlineRefs: 2 });
testSchemas(ajv, false);
});
it('should avoid schema substitution when refs are inlined (issue #77)', function() {
var ajv = Ajv({ verbose: true });
var ajv = new Ajv({ verbose: true });
var schemaMessage = {
$schema: "http://json-schema.org/draft-04/schema#",