mock_custom_loader.js 1019 B

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