2.1.0 • Published 7 years ago

urlmock v2.1.0

Weekly downloads
39
License
MIT
Repository
github
Last release
7 years ago

urlmock

NPM version build status Test coverage Gittip David deps node version npm download

Easy load mock data from a specify url.


Features

  • Simple url and mock file mapping rules.
  • Support *.js, *.json and common datas.

Installation

$ npm install urlmock

URL Mapping Rules

Use ?__scene[={scene}] to select mock scene, default scene is default.

Rules

{url}?__scene={scene} => {datadir}{url}/{scene}.js

Examples

  • {datadir} equal /foobar/test/mocks

There are some mapping rules:

  • /?__scene (meaning /?__scene=default) => /foobar/test/mocks/default.js
  • /users?__scene=other => /foobar/test/mocks/users/other.js
  • /users/?__scene=second => /foobar/test/mocks/users/second.js
  • /users/123.html?__scene => /foobar/test/mocks/users/123.html/default.js
  • /users/123.json?__scene => /foobar/test/mocks/users/123.json/default.js
  • /users/123.json?__scene=one => /foobar/test/mocks/users/123.json/one.js
  • /users/123?__scene=one => /foobar/test/mocks/users/123/one.js

So we will see total structure on /foobar/test/mocks like this:

  • / (GET /)
    • default.js
    • users/ (GET /users)
      • default.js
      • other.js
      • second.js
      • 123.html/ (GET /users/123.html)
        • default.js
      • 123.json/ (GET /users/123.json)
        • default.js
        • one.js
      • 123/ (GET /users/123)
        • default.js
        • one.js
        • common.js

Mock file format

*.js: normal js file

../common/user.js

module.exports = {
  name: 'mock-name',
  age:100,
  isAdmin: false,
  logined: false,
  homepage: 'http://ooxx.com/fengmk2',
  // .. other common user properties
};

../common/admin.js

module.exports = {
  isAdmin: true,
  logined: true,
};

./logined_user.js

module.exports = {
  logined: true,
};

logined_admin.js

module.exports = {
  name: 'fengmk2',
  age: 18,
  // require common data
  __requires: ['../common/user', './logined_user', '../common/admin'],
};

Merge sequence:

Output <== ../common/user <== ./logined_user <== ../common/admin

So logined_admin.js will merge all data:

{
  name: 'fengmk2',
  age: 18,
  isAdmin: true,
  logined: true,
  homepage: 'http://ooxx.com/fengmk2',
  // .. other common user properties
}

*.json: readonly json file

foo.json:

{
  "name": "fengmk2",
  "age": 18,
  "logined": false
}

Quick start

var urlmock = require('urlmock');

var data = urlmock('/foobar/test/mocks', '/users/1984?__scene=newuser');
console.log(data);
// { name: 'fengmk2', age: 18 }

use __name for scene name

Default scene name is file name. We can add __name special property on mock data to set the scene name.

default.js will show scene name is normal user (default.js)

module.exports = {
  name: 'jack',
  __name: 'normal user'
};

ma.js will show scene name is 马 yun yun (ma.js)

module.exports = {
  name: 'jack ma',
  __name: '马 yun yun',
  __requires: ['./default']
};

API Reference

#urlmock(datadir, url)

Get the url mapping mock data.

  • datadir: store mock data directory path
  • url: current request url
var data = urlmock('/foobar/test/mocks', '/users/1984?__scene=newuser');
console.log(data);
// { name: 'fengmk2', age: 18 }

#urlmock(datadir, ctx)

Get the url mapping mock data.

  • datadir: store mock data directory path
  • ctx: koa context instance
var data = urlmock('/foobar/test/mocks', ctx);
console.log(data);
// { name: 'fengmk2', age: 18 }

License

MIT

2.1.0

7 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.3.1

9 years ago

1.3.0

9 years ago

1.2.0

9 years ago

1.1.0

9 years ago

1.0.0

9 years ago