1 | 'use strict';
|
2 |
|
3 | module.exports = app => {
|
4 | const customLoader = app.config.customLoader;
|
5 | if (!customLoader) return;
|
6 |
|
7 | for (const field of Object.keys(customLoader)) {
|
8 | const loaderConfig = Object.assign({}, customLoader[field]);
|
9 | loaderConfig.field = field;
|
10 | addMethod(loaderConfig);
|
11 | }
|
12 |
|
13 | function addMethod(loaderConfig) {
|
14 | const field = loaderConfig.field;
|
15 | const appMethodName = 'mock' + field.replace(/^[a-z]/i, s => s.toUpperCase());
|
16 | if (app[appMethodName]) {
|
17 | app.coreLogger.warn('Can\'t override app.%s', appMethodName);
|
18 | return;
|
19 | }
|
20 | app[appMethodName] = function(service, methodName, fn) {
|
21 | if (typeof service === 'string') {
|
22 | const arr = service.split('.');
|
23 | service = loaderConfig.inject === 'ctx' ? this[field + 'Classes'] : this[field];
|
24 | for (const key of arr) {
|
25 | service = service[key];
|
26 | }
|
27 | service = service.prototype || service;
|
28 | }
|
29 | this._mockFn(service, methodName, fn);
|
30 | return this;
|
31 | };
|
32 | }
|
33 | };
|