在开发和测试中,我们一般不会使用生产用的真实的远程服务器,因为这样可能对真实服务器增加负载,而且很不安全。
为了测试我们的程序我们可以使用SAPUI5提供的Mock Server来模拟一个服务器。
Walkthrough中的Step27详细讲解了Mock Server的实现过程。
Walkthrough Step27链接:https://sapui5.netweaver.ondemand.com/sdk/#/topic/bae9d90d2e9c4206889368f04edab508
但是我用例子的代码测试发现画面加载的数据不是Mock数据,而是Step26OData远程service的数据。
我试着改了webapp/localService/mockserver.js这个文件里下面这句话:
rootUri: "https://services.odata.org/V2/Northwind/Northwind.svc/"
改成:
rootUri: "/destinations/northwind/V2/Northwind/Northwind.svc/"
测试发现数据正常显示为Mock数据了。
原因分析
其实在Step27的后面描述中我们也能看到,mockserver.js的init方法中,
首先创建了一个MockServer实例,这个实例必须与真实server相同的URI,可以是绝对路径,也可以是我们在manifest.json中配置的datasources里的相对路径。
然后模拟远程访问的响应时间给Mock Sever配置一个延迟。
最后使用MockSever的simulate方法使得请求的数据由我们的MockServer提供,而不是由真实服务提供。
由于Step26运行时出现同源策略违反导致数据加载不上,我们把manifest.json中的datasources里的uri配置为相对路径(SAP Cloud Platform Cockpit中的Destination),
所以在Step27时两个URI不是完全一致的,导致Mock失败。
解决方案
只需将这两个URI改成一致就好了。
都是"https://services.odata.org/V2/Northwind/Northwind.svc/",
或者都是 "/destinations/northwind/V2/Northwind/Northwind.svc/"。