JSON Schemaからmockつくるやつ
人生初のnpmです: json-schema-mockifier
Usage
npm install
します.
$ npm install json-schema-mockifier
require
します.
var mockifier = require("json-schema-mockifier");
JSON Schemaファイルを読み込みます.
var schema = require("./spec/fixtures/schema.json");
JSON Schemaからmockを作ります.
var mocks = mockifier.mockify(schema);
こんなかんじのJSON Schemaを読んだとき,たとえばmocks.post
の内容は以下のようになります.
{
created_at: '2012-01-01T12:00:00Z',
id: '01234567-89ab-cdef-0123-456789abcdef',
body: 'Ah^~ My heart will be hopping^~',
updated_at: '2012-01-01T12:00:00Z',
user: {
id: '01234567-89ab-cdef-0123-456789abcdef',
name: 'Syaro'
},
comments: [
{
created_at: '2012-01-01T12:00:00Z',
id: '01234567-89ab-cdef-0123-456789abcdef',
body: 'Is the order a rabbit?',
updated_at: '2012-01-01T12:00:00Z',
user: {
id: '01234567-89ab-cdef-0123-456789abcdef',
name: 'Syaro'
}
}
]
}
例えばAngularJSなアプリのテストコードで以下のようにするとかしたら幸せになれそうですね.
$httpBackend.whenGET("/api/posts").respond([mocks.post])
なにやってんの
-
json-schema-parserでschema中の
$ref
を全部展開する - ルート直下の
properties
ごとにmockを作っていく -
例示したschemaだと
user
,post
,comment
- 例えば
post
の場合,properties/post/properties
を見る - 各propertyのexampleを引っこ抜いてくる
- しあわせ
json-schema-parserって?
HerokuのJSON Schemaにあるような$ref
を全部展開するためのmodule.
npmのライブラリでいい感じにこれをやってくれるやつが無いので自作した(他のやつはValidatorに内包されてるとかそもそも展開できないとかそんなん).
JSON Schemaでは色んな所で利用するpropertyが出てきたりするが,それを毎回書くのはアホらしいので再利用できるようにdefinition
以下にpropertyの定義とか書いて色んな所から参照($ref
)している.
ただこの記法はクソややこしいのでこれが正しいとも限らない(ちゃんと展開できないライブラリとかも多い).そこで,たとえばQiitaのJSON SchemaはおそらくJsonWorldのDSLでSchemaを記述しており,$ref
やdefinition
は出てこない.こんな感じのDSLで書くとクラス参照することで$ref
の代わりになるしわかりやすくていい感じかもしれない.