urlmock
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