UNPKG

1.02 kBJavaScriptView Raw
1'use strict';
2
3module.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};