SAP CAP篇十三:拥抱TypeScript

本文目录

  • 本系列文章
  • 从新开始
    • 为啥要用TypeScript
    • 官方文档
    • 程序框架
      • 从`package.json`开始
      • `tsconfig.json`
      • Jest的配置 `jest.config.js`
      • 服务的实现
      • 自动化测试
        • `setup.ts`
        • 文件夹`integration`
  • 执行及测试
  • 对应代码及branch

本系列文章

SAP CAP篇一: 快速创建一个Service,基于Java的实现
SAP CAP篇二:为Service加上数据库支持
SAP CAP篇三:定义Model
SAP CAP篇四:为CAP添加Fiori Elements程序(1)
SAP CAP篇五:为CAP添加Fiori Elements程序(2)
SAP CAP篇六:为CAP添加Fiori Elements程序(3)
SAP CAP篇七:为CAP添加Fiori Launchpad入口 (Sandbox环境)
SAP CAP篇八:为CAP添加App Router并支持Fiori Launchpad (Sandbox环境)
SAP CAP篇九:升级为SAP CDS 7.0, CAP Java 2以及Spring Boot 3
SAP CAP篇十:理解Fiori UI的Annoation定义
SAP CAP篇十一:支持Media Object:图片、附件等
SAP CAP篇十二:AppRouter 深入研究

从新开始

虽然本篇是整个CAP系列的第十三篇,但是,本篇不基于任何之前的文章或代码基础,这是一个全新的分支。

为啥要用TypeScript

对于TypeScript的重要性,其实无需赘述。这是因为JavaScript是一门解释性语言,导致了在大型项目中,在调用模块之间的类型安全变成了一个黑洞。而TypeScript作为JavaScript的超集,从本源上解决了这个问题。
当然,天下没有免费的午餐,当TypeScript带来了Type的同时,也不可避免地带来了复杂性和额外的编译开支。

官方文档

当然,官方文档还是值得看看的,虽然一如既往的发散性思维。
链接:Help Doc

程序框架

从一个空的文件夹开始这个新项目。

package.json开始

创建package.json,如下:

{"name": "@alvachien/sapcap-fiorielements-tsapp","version": "1.0.0","scripts": {"test": "npx jest --silent","start": "cds serve srv/world.cds","start:ts": "cds-ts serve srv/world.cds"},"dependencies": {"@sap/cds": "^7.5.2"},"devDependencies": {"@cap-js/sqlite": "^1.4.0","@types/jest": "^29.5.11","@types/node": "^20.11.5","axios": "^1.6.5","jest": "^29.7.0","ts-jest": "^29.1.2","ts-node": "^10.9.2","typescript": "^5.3.3"},"eslintConfig": {"extends": "eslint:recommended","env": {"es2020": true,"node": true,"jest": true,"mocha": true},"globals": {"SELECT": true,"INSERT": true,"UPDATE": true,"DELETE": true,"CREATE": true,"DROP": true,"CDL": true,"CQL": true,"CXL": true,"cds": true},"rules": {"no-console": "off","require-atomic-updates": "off"}}
}

tsconfig.json

作为TypeScript必备的配置文件:

{"compilerOptions": {"target": "ES6","module": "commonjs","outDir": "./gen/srv/srv","rootDir": "./srv","baseUrl": "./","moduleResolution": "node","skipLibCheck": true,"preserveConstEnums": true,"sourceMap": false,"allowJs": true,"strict": true,"strictNullChecks": false,"strictPropertyInitialization": false,"esModuleInterop": true},"include": ["./srv/**/*"]
}

Jest的配置 jest.config.js

作为Jest的配置文件:

module.exports = {preset: "ts-jest",globalSetup: "./test/setup.ts"
};

服务的实现

创建一个srv文件夹,分别创建两个文件world.cdsworld.ts

world.cds如下:

service say @(path: '/say') {function hello (to:String) returns String;
}

word.ts则提供了实现逻辑:

import type { Request } from "@sap/cds/apis/services"module.exports = class say {hello(req: Request) {return `Hello ${req.data.to} from a TypeScript file!`}
}

自动化测试

文件夹test包含了用于自动化测试的文件。

setup.ts

setup.ts用于Jest的初始化。

module.exports = async () => {process.env.CDS_TYPESCRIPT = "true";
};
文件夹integration

如这个文件夹的命名可见,这里文件中主要是为了集成测试而准备的。

新建hello-world.test.ts

const cds = require('@sap/cds');describe('Hello world!', () => {beforeAll(() => {        });afterAll(() => {});const { GET } = cds.test.in(__dirname, '../../srv').run('serve', 'world.cds');it('should say hello with class impl', async () => {const { data } = await GET `/say/hello(to='world')`;expect(data.value).toMatch(/Hello world.*typescript.*/i);});
});

执行及测试

这时候,首先执行以下命令来安装对应的开发包:

npm i

执行下列命令就可以让这个hello world的服务跑起来:

npm run start:ts

执行下列命令来执行自动化测试:

npm run test

自动化测试结果:

> @alvachien/sapcap-fiorielements-tsapp@1.0.0 test
> npx jest --silentPASS  test/integration/hello-world.test.tsTest Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.931 s, estimated 1 s

对应代码及branch

与本文配套的代码参见这里。

本篇对应的branch是9_typescript

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序商城 免 费 搭 建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全景+b2b2c

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 使用技术: Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台: 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务(30个通用…

Unity中URP下的SimpleLit的 BlinnPhong高光反射计算

文章目录 前言一、回顾Blinn-Phong光照模型1、Blinn-Phong模型: 二、URP下的SimpleLit的 BlinnPhong1、输入参数2、程序体计算 前言 在上篇文章中,我们分析了 URP下的SimpleLit的 Lambert漫反射计算。 Unity中URP下的SimpleLit的 Lambert漫反射计算 我…

Java基于沙箱环境实现支付宝支付

一、支付宝沙箱环境介绍 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。合理使用沙箱环境,可以…

【2024最新-python3小白零基础入门】No5.python函数的使用

文章目录 一 定义一个函数二 函数语法三 函数举例3.1 让我们使用函数来输出"Hello World!":3.2 比较两个数,并返回较大的数: 四 函数调用五 函数参数传递5.1 可更改(mutable)与不可更改(immutable)对象5.2 python 传不可变对象实例…

Android14实战:调整A2DP音量曲线(五十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

【Linux install】Ubuntu和win双系统安装及可能遇到的所有问题

文章目录 1.前期准备1.1 制作启动盘1.2关闭快速启动、安全启动、bitlocker1.2.1 原因1.2.2 进入BIOSshell命令行进入BIOSwindows设置中高级启动在开机时狂按某个键进入BIOS 1.2.3 关闭Fast boot和Secure boot 1.3 划分磁盘空间1.3.1 查看目前的虚拟内存大小 2.开始安装2.1 使用…

大模型的学习路线图推荐—多维度深度分析【云驻共创】

🐲本文背景 近年来,随着深度学习技术的迅猛发展,大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数,这使得它们在处理复杂任务时表现得更为出色,但同时也对计算资源和数据量提出了更高的要求。 …

源 “MySQL 5.7 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确

Is this ok [y/d/N]: y Downloading packages: 警告:/var/cache/yum/x86_64/7/mysql57-community/packages/mysql-community-server-5.7.44-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql 检…

redis pipeline实现,合并多个请求,可有效降低redis访问延迟

上代码 import redistry:pool redis.ConnectionPool(hosthost, portport)r redis.Redis(connection_poolpool) except Exception as e:print(f"Failed to connect to {host} with error: {e}") try:pipeline r.pipeline(transactionFalse) # Use the last Redis…

RK3568 Ubuntu关于rootfs大小问题

有关如何移植Ubuntu可以参考博客: RK3568 移植Ubuntu-CSDN博客 但是移植完成之后会发现一个问题,就是文件系统的容量已经满了,若想安装软件和库是不可能的,所以需要在打包镜像文件那里做个修改,以及修改parameter.txt文件 打包镜像文件 1、创建空镜像文件,大小为2048…

Linux防火墙常用命令

1、CentOS-7 注意:下列命令要用root账号/权限执行 1.1、查看防火墙状态 systemctl status firewalld1.2、非永久性关闭防火墙 systemctl stop firewalld1.3、非永久性开启防火墙 systemctl start firewalld1.4、重启防火墙 systemctl restart firewalld1.5、设…

C语言代码 打印100-200之间的素数

打印100-200之间的素数 编程思路&#xff1a; 素数判断规则&#xff1a;只能被1和它本身整除的数 第一步&#xff1a;先找出100-200的整数。第二步&#xff1a;在这些数中筛选出只能被1和它本身出能整除的数打印出来。 代码示例&#xff1a; #include <stdio.h> #incl…

Spring Boot 2.x 到 3.2 的全面升级指南

Spring Framework 是一种流行的开源企业级框架&#xff0c;用于创建在 Java Virtual Machine (JVM) 上运行的独立、生产级应用程序。而Spring Boot 是一个工具&#xff0c;可以让使用 Spring 框架更快、更轻松地开发 Web 应用程序和微服务。随着 Spring Boot 的不断发展&#x…

canvas绘制旋转的椭圆花

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

MySQL-函数-日期函数

常见的日期函数 案例

Flutter中extension扩展类介绍及使用指南

Flutter 是一种流行的跨平台移动应用开发框架&#xff0c;由Google推出。在Flutter的世界中&#xff0c;扩展类(extension)是一种强大的工具&#xff0c;可以帮助开发者更好地组织和重用代码。本文将介绍Flutter中扩展类的基本概念&#xff0c;并展示如何在你的应用程序中有效地…

Hypervisor 和Docker 还有Qemu有什么区别与联系?

Hypervisor Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层&#xff0c;可以让多个操作系统和应用共享硬件资源&#xff0c;也叫做虚拟机监视器&#xff08;VMM&#xff09;。 Hypervisor有两种类型&#xff1a;Type I和Type II。 Type I 直接运行在硬件上&a…

Http常用状态码

200 OK 请求成功。 201 Created 该请求已成功&#xff0c;并因此创建了一个新的资源。这通常是在PUT请求之后发送的响应。 204 No Content 服务器成功处理了请求&#xff0c;但不需要返回任何实体内容&#xff0c;并且希望返回更新了的元信息。响应可能通过实体头部的形式…

LabVIEW电火花线切割放电点位置

介绍了一个电火花线切割放电点位置分布评价系统&#xff0c;特别是在系统组成、硬件选择和LabVIEW软件应用方面。 本系统由两个主要部分组成&#xff1a;硬件和软件。硬件部分包括电流传感器、高速数据采集卡、开关电源、电阻和导线。软件部分则由LabVIEW编程环境构成&#xf…

复杂高层建筑环境多模态导航服务和引导管理机器人系统设计(预告)

课题基础 机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果 将上面这篇所涉及的算法等应用到如下环境中。 Gazebo新环境AWS RoboMaker Hospital医院场景适用于ROS1和ROS2 高层可以简化为多层测试。最典型的就是两层及以上。 简介 随着城市化进程的加速和高层建筑…