@v4fire/core
Version:
V4Fire core library
128 lines (100 loc) • 2.56 kB
Markdown
This module provides a middleware to attach mock data to a request.
```js
import Provider, { provider } from 'core/data';
import { attachMock } from 'core/data/middlewares';
@provider
export default class User extends Provider {
static middlewares = {
attachMock
};
static mocks = {
PUT: [
{
body: {
age: 31
},
response: {
id: 1,
name: "Andrey",
age: 31
}
}
],
GET: [{
response: {
id: 1,
name: "Andrey",
age: 30
}
}]
};
baseURL = 'user/:id';
}
```
Keep in mind that mock root keys represent HTTP methods, not provider methods.
The values contain arrays of query objects for matching: the algorithm finds the best match and returns its answer.
In addition, the middleware supports dynamic response casting.
```js
import Provider, { provider } from 'core/data';
import { attachMock } from 'core/data/middlewares';
@provider
export default class User extends Provider {
static middlewares = {
attachMock
};
static mocks = {
GET: [{
response(params, response) {
if (!params.opts.query?.id) {
response.status = 400;
return;
}
response.status = 200;
return {
id: 1,
name: "Andrey",
age: 30
};
}
}],
POST: [{
response(params, response) {
if (!params.opts.headers['authorization']) {
response.status = 302;
response.headers = {location: '/login'};
return;
}
// authorize user
// ...
response.status = 201;
}
}]
};
baseURL = 'user/:id';
}
```
Finally, you can use dynamic importing with mocks.
```js
import Provider, { provider } from 'core/data';
import { attachMock } from 'core/data/middlewares';
@provider
export default class User extends Provider {
static middlewares = {
attachMock
};
static mocks = import('mocks/user.json');
baseURL = 'user/:id';
}
```
By default, all data mocks are disabled, but you can enable them by simply typing in your browser console:
```js
// Enables mocks for the User provider
setEnv('mock', {patterns: ['User']});
// Enables mocks for all providers
setEnv('mock', {patterns: ['.*']});
```
These patterns are converted to RegExp objects and matched with provider names (including namespaces).
Configuration settings are stored in the browser local storage.