LoginSignup
27
25

More than 5 years have passed since last update.

【JavaScript】JSON Schemaからmock作るやつ作った

Posted at

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])

なにやってんの

  1. json-schema-parserでschema中の$refを全部展開する
  2. ルート直下のpropertiesごとにmockを作っていく
    1. 例示したschemaだとuserpostcomment
    2. 例えばpostの場合,properties/post/propertiesを見る
    3. 各propertyのexampleを引っこ抜いてくる
  3. しあわせ

json-schema-parserって?

HerokuのJSON Schemaにあるような$refを全部展開するためのmodule.
npmのライブラリでいい感じにこれをやってくれるやつが無いので自作した(他のやつはValidatorに内包されてるとかそもそも展開できないとかそんなん).

JSON Schemaでは色んな所で利用するpropertyが出てきたりするが,それを毎回書くのはアホらしいので再利用できるようにdefinition以下にpropertyの定義とか書いて色んな所から参照($ref)している.
ただこの記法はクソややこしいのでこれが正しいとも限らない(ちゃんと展開できないライブラリとかも多い).そこで,たとえばQiitaのJSON SchemaはおそらくJsonWorldのDSLでSchemaを記述しており,$refdefinitionは出てこない.こんな感じのDSLで書くとクラス参照することで$refの代わりになるしわかりやすくていい感じかもしれない.

References

27
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
25