chai-json-schema
Chai プラグイン。 JSON Schema v4 に対する値の検証を行うアサーションを提供します。
豊富な 検証用語 (例) を使用して、単純な値と複雑なオブジェクトの両方をアサートします。
json-schema の一般的なヘルプについては、この優れた ガイド と使いやすい リファレンス を参照してください。
注意事項
JSON Schema の検証は Tiny Validator tv4 によって行われます。
tv4 は現在活発に開発されておらず、draft-04 以降の JSON Schema バージョンもサポートしていないようです。しかし、この Chai プラグインは当面の間、tv4 をバックエンドとして使用します。より新しいバージョンの JSON Schema を使用したい場合や、より高いパフォーマンスが必要な場合は、ajv を chai-json-schema-ajv と組み合わせて使用することを検討してください。
スキーマがアサーションの呼び出し前に追加されていないスキーマへの $ref
を使用している場合、アサーションは失敗します。スキーマを事前に設定するには、chai.tv4.addSchema(uri, schema)
を使用してください。
JSON Schema の主なユースケースは JSON ドキュメントと API レスポンスの検証ですが、*あらゆる* JavaScript の値やオブジェクトを記述および検証するための強力な方法でもあります。
使用方法
サーバーサイド
npm からインストールする
$ npm install chai-json-schema
Chai に chai-json-schema モジュールを使用させる
var chai = require('chai');
chai.use(require('chai-json-schema'));
ブラウザサイド
グローバル変数を使用する
jsonpointer.js、Tiny Validator tv4、Chai の後に chai-json-schema を読み込む
<script src="jsonpointer.js"></script>
<script src="tv4.js"></script>
<script src="chai.js"></script>
<script src="chai-json-schema.js"></script>
bower からインストールする
$ bower install chai-json-schema
このモジュールは CommonJS、AMD、およびブラウザのグローバル変数をサポートしています。tv4
のグローバル変数を shim し、jsonpointer.js
が 'jsonpointer'
として require できることを確認する必要がある場合があります。
アサーション
jsonSchema(value, schema)
指定された JavaScript の値が指定された JSON Schema に準拠していることを検証します。値とスキーマはどちらも外部データソースからロードされた JSON である可能性が高いですが、リテラルまたはオブジェクトインスタンスにすることもできます。
var goodApple = {
skin: 'thin',
colors: ['red', 'green', 'yellow'],
taste: 10
};
var badApple = {
colors: ['brown'],
taste: 0,
worms: 2
};
var fruitSchema = {
title: 'fresh fruit schema v1',
type: 'object',
required: ['skin', 'colors', 'taste'],
properties: {
colors: {
type: 'array',
minItems: 1,
uniqueItems: true,
items: {
type: 'string'
}
},
skin: {
type: 'string'
},
taste: {
type: 'number',
minimum: 5
}
}
};
//bdd style
expect(goodApple).to.be.jsonSchema(fruitSchema);
expect(badApple).to.not.be.jsonSchema(fruitSchema);
goodApple.should.be.jsonSchema(fruitSchema);
badApple.should.not.be.jsonSchema(fruitSchema);
//tdd style
assert.jsonSchema(goodApple, fruitSchema);
assert.notJsonSchema(badApple, fruitSchema);
追加 API
tv4
インスタンスは chai.tv4
として「エクスポート」され、検証で使用するためにスキーマを追加するためにアクセスできます。
chai.tv4.addSchema(uri, schema);
他にも便利なメソッドがあります
var list = chai.tv4.getMissingUris();
var list = chai.tv4.getMissingUris(/^https?:/);
var list = chai.tv4.getSchemaUris();
var list = chai.tv4.getSchemaUris(/example.com/);
var schema = chai.tv4.getSchema('http://example.com/item');
var schema = chai.tv4.getSchema('http://example.com/item/#sub/type');
chai.tv4.dropSchemas();
その他の API メソッドとバリデータの情報については、tv4 ドキュメント を参照してください。
非標準の tv4 プロパティ
循環オブジェクト
これは内部の tv4
validate 呼び出しに渡され、循環オブジェクトのサポート を有効にします。これにより、tv4 は循環参照のループに入るリスクなしに、通常の JavaScript 構造 (純粋な JSON ではなく) を検証できます。
chai.tv4.cyclicCheck = true;
これは通常の検証よりも少し遅いので、デフォルトでは無効になっています。
不明なプロパティの禁止
chai.tv4.banUnknown = true;
内部の tv4
validate 呼び出しに渡されると、不明なスキーマプロパティで検証が失敗します。スキーマに望ましくないデータが含まれていないことを確認するために使用します。
複数のエラーの検証
chai.tv4.multiple = true;
tv4.validateResult
の代わりに tv4.validateMultiple
を呼び出して検証します。すべての検証エラーを確認したい場合にこれを使用します。
リモート参照
アサーションの同期性のため、検証中にリモート参照を動的にロードすることはサポートされません。
お気に入りのテストランナーの非同期準備機能を使用して、リモートスキーマをプリロードします。
// simplified example using a bdd-style async before();
// as used in mocha, jasmine etc.
before(function (done) {
// iterate missing
var checkMissing = function (callback) {
var missing = chai.tv4.getMissingUris();
if (missing.length === 0) {
// all $ref's solved
callback();
return;
}
// load a schema using your favourite JSON loader
// (jQuery, request, SuperAgent etc)
var uri = missing.pop();
myFavoriteJsonLoader.load(uri, function (err, schema) {
if (err || !schema) {
callback(err || 'no data loaded');
return;
}
// add it
chai.tv4.addSchema(uri, schema);
// iterate
checkMissing(callback);
});
};
// load first instance manually
myFavoriteJsonLoader.load(uri, function (err, schema) {
if (err || !schema) {
done(err || 'no data loaded');
return;
}
// add it
chai.tv4.addSchema(uri, schema);
// start checking
checkMissing(done);
});
});
履歴
リリース を参照してください。
ビルド
git チェックアウトで開発依存関係をインストールする
$ npm install
グローバル grunt コマンドが必要です
$ npm install grunt-cli -g
ビルドとテストの実行
$ grunt
追加のコマンドについては、Gruntfile
を参照してください。
ライセンス
Copyright (c) 2013 Bart van der Schoor
MIT ライセンスの下でライセンスされています。