mockserver.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. sap.ui.define([
  2. "sap/ui/core/util/MockServer",
  3. "sap/ui/model/json/JSONModel",
  4. "sap/base/Log"
  5. ], function (MockServer, JSONModel, Log) {
  6. "use strict";
  7. var oMockServer,
  8. _sAppPath = "sap/ui/demo/orderbrowser/",
  9. _sJsonFilesPath = _sAppPath + "localService/mockdata";
  10. var oMockServerInterface = {
  11. /**
  12. * Initializes the mock server asynchronously.
  13. * You can configure the delay with the URL parameter "serverDelay".
  14. * The local mock data in this folder is returned instead of the real data for testing.
  15. * @protected
  16. * @returns{Promise} a promise that is resolved when the mock server has been started
  17. */
  18. init : function (oOptionsParameter) {
  19. var oOptions = oOptionsParameter || {};
  20. return new Promise(function(fnResolve) {
  21. var sManifestUrl = sap.ui.require.toUrl(_sAppPath + "manifest.json"),
  22. oManifestModel = new JSONModel(sManifestUrl);
  23. oManifestModel.attachRequestCompleted(function () {
  24. var oUriParameters = new URLSearchParams(window.location.search),
  25. // parse manifest for local metadata URI
  26. sJsonFilesUrl = sap.ui.require.toUrl(_sJsonFilesPath),
  27. oMainDataSource = oManifestModel.getProperty("/sap.app/dataSources/mainService"),
  28. sMetadataUrl = sap.ui.require.toUrl(_sAppPath + oMainDataSource.settings.localUri),
  29. // ensure there is a trailing slash
  30. sMockServerUrl = /.*\/$/.test(oMainDataSource.uri) ? oMainDataSource.uri : oMainDataSource.uri + "/";
  31. // create a mock server instance or stop the existing one to reinitialize
  32. if (!oMockServer) {
  33. oMockServer = new MockServer({
  34. rootUri: sMockServerUrl
  35. });
  36. } else {
  37. oMockServer.stop();
  38. }
  39. // configure mock server with the given options or a default delay of 0.5s
  40. MockServer.config({
  41. autoRespond : true,
  42. autoRespondAfter : (oOptions.delay || oUriParameters.get("serverDelay") || 500)
  43. });
  44. // simulate all requests using mock data
  45. oMockServer.simulate(sMetadataUrl, {
  46. sMockdataBaseUrl : sJsonFilesUrl,
  47. bGenerateMissingMockData : true
  48. });
  49. var aRequests = oMockServer.getRequests();
  50. // compose an error response for requesti
  51. var fnResponse = function (iErrCode, sMessage, aRequest) {
  52. aRequest.response = function(oXhr){
  53. oXhr.respond(iErrCode, {"Content-Type": "text/plain;charset=utf-8"}, sMessage);
  54. };
  55. };
  56. // simulate metadata errors
  57. if (oOptions.metadataError || oUriParameters.get("metadataError")) {
  58. aRequests.forEach(function (aEntry) {
  59. if (aEntry.path.toString().indexOf("$metadata") > -1) {
  60. fnResponse(500, "metadata Error", aEntry);
  61. }
  62. });
  63. }
  64. // simulate request errors
  65. var sErrorParam = oOptions.errorType || oUriParameters.get("errorType"),
  66. iErrorCode = sErrorParam === "badRequest" ? 400 : 500;
  67. if (sErrorParam) {
  68. aRequests.forEach(function (aEntry) {
  69. fnResponse(iErrorCode, sErrorParam, aEntry);
  70. });
  71. }
  72. // custom mock behaviour may be added here
  73. // set requests and start the server
  74. oMockServer.setRequests(aRequests);
  75. oMockServer.start();
  76. Log.info("Running the app with mock data");
  77. fnResolve();
  78. });
  79. oManifestModel.attachRequestFailed(function () {
  80. Log.error("Failed to load application manifest");
  81. fnResolve();
  82. });
  83. });
  84. },
  85. /**
  86. * @public returns the mockserver of the app, should be used in integration tests
  87. * @returns {sap.ui.core.util.MockServer} the mockserver instance
  88. */
  89. getMockServer : function () {
  90. return oMockServer;
  91. }
  92. };
  93. return oMockServerInterface;
  94. });