'use strict';
|
|
module.exports = app => {
|
const customLoader = app.config.customLoader;
|
if (!customLoader) return;
|
|
for (const field of Object.keys(customLoader)) {
|
const loaderConfig = Object.assign({}, customLoader[field]);
|
loaderConfig.field = field;
|
addMethod(loaderConfig);
|
}
|
|
function addMethod(loaderConfig) {
|
const field = loaderConfig.field;
|
const appMethodName = 'mock' + field.replace(/^[a-z]/i, s => s.toUpperCase());
|
if (app[appMethodName]) {
|
app.coreLogger.warn('Can\'t override app.%s', appMethodName);
|
return;
|
}
|
app[appMethodName] = function(service, methodName, fn) {
|
if (typeof service === 'string') {
|
const arr = service.split('.');
|
service = loaderConfig.inject === 'ctx' ? this[field + 'Classes'] : this[field];
|
for (const key of arr) {
|
service = service[key];
|
}
|
service = service.prototype || service;
|
}
|
this._mockFn(service, methodName, fn);
|
return this;
|
};
|
}
|
};
|