https://github.com/node-modules/urlmock
Easy load mock data from a specify url.
https://github.com/node-modules/urlmock
Last synced: 6 months ago
JSON representation
Easy load mock data from a specify url.
- Host: GitHub
- URL: https://github.com/node-modules/urlmock
- Owner: node-modules
- License: other
- Created: 2014-11-20T09:14:56.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2023-01-09T20:28:53.000Z (almost 3 years ago)
- Last Synced: 2025-06-03T02:09:25.318Z (7 months ago)
- Language: JavaScript
- Size: 22.5 KB
- Stars: 5
- Watchers: 16
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
- License: LICENSE
Awesome Lists containing this project
README
urlmock
=======
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]
[![Gittip][gittip-image]][gittip-url]
[![David deps][david-image]][david-url]
[![node version][node-image]][node-url]
[![npm download][download-image]][download-url]
[npm-image]: https://img.shields.io/npm/v/urlmock.svg?style=flat-square
[npm-url]: https://npmjs.org/package/urlmock
[travis-image]: https://img.shields.io/travis/node-modules/urlmock.svg?style=flat-square
[travis-url]: https://travis-ci.org/node-modules/urlmock
[coveralls-image]: https://img.shields.io/coveralls/node-modules/urlmock.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/node-modules/urlmock?branch=master
[gittip-image]: https://img.shields.io/gittip/fengmk2.svg?style=flat-square
[gittip-url]: https://www.gittip.com/fengmk2/
[david-image]: https://img.shields.io/david/node-modules/urlmock.svg?style=flat-square
[david-url]: https://david-dm.org/node-modules/urlmock
[node-image]: https://img.shields.io/badge/node.js-%3E=_0.10-green.svg?style=flat-square
[node-url]: http://nodejs.org/download/
[download-image]: https://img.shields.io/npm/dm/urlmock.svg?style=flat-square
[download-url]: https://npmjs.org/package/urlmock
Easy load mock data from a specify url.
---
## Features
- Simple url and mock file mapping rules.
- Support `*.js`, `*.json` and common datas.
## Installation
```bash
$ 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`
```js
module.exports = {
name: 'mock-name',
age:100,
isAdmin: false,
logined: false,
homepage: 'http://ooxx.com/fengmk2',
// .. other common user properties
};
```
`../common/admin.js`
```js
module.exports = {
isAdmin: true,
logined: true,
};
```
`./logined_user.js`
```js
module.exports = {
logined: true,
};
```
`logined_admin.js`
```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:
```js
{
name: 'fengmk2',
age: 18,
isAdmin: true,
logined: true,
homepage: 'http://ooxx.com/fengmk2',
// .. other common user properties
}
```
### `*.json`: readonly json file
`foo.json`:
```json
{
"name": "fengmk2",
"age": 18,
"logined": false
}
```
## Quick start
```js
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)`
```js
module.exports = {
name: 'jack',
__name: 'normal user'
};
```
`ma.js` will show scene name is `马 yun yun (ma.js)`
```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
```js
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
```js
var data = urlmock('/foobar/test/mocks', ctx);
console.log(data);
// { name: 'fengmk2', age: 18 }
```
## License
MIT