当前位置: 首页 > news >正文

基于EdgeWorkers的边缘应用如何进行单元测试?

随着各行各业数字化转型的持续深入,越来越多企业开始选择将一些应用程序放在距离最终用户更近的边缘位置来运行,借此降低延迟,提高应用程序响应速度,打造更出色的用户体验。

相比传统集中部署和运行的方式,这种边缘应用的开发、部署、运行等工作需要一系列全新工具和技术的支持。例如Akamai EdgeWorkers,作为Akamai构建的全球化分布式无服务器网络,可以帮助客户在全球超过4200个位置,从最接近最终用户的地方运行JavaScript代码,进而实现更快的响应速度。

然而随着各种应用程序将越来越多的将¥功能转移至边缘位置,我们也更迫切地需要确保应用的每个功能都可以顺利地完成自己的本职工作,为此往往需要进行单元测试(Unit test)。单元测试可以分别运行程序中每个组成部分所对应的代码,检查代码的输入和输出,借此开发者就能分别检查程序中的每个部分,了解在哪里(以及为什么)发生错误。目前市面上有很多框架可以帮助我们轻松进行这样的测试,其中比较流行的包括Jest、Mocha、Jasmine以及Cypress等。

在EdgeWorkers的帮助下,开发者将能在边缘处运行Mock测试(单元测试中的一种方法),进而:

  • 再将代码发布到Akamai EdgeWorkers平台之前,确定代码语法正确,可以顺利运行不出错
  • 验证代码中的业务逻辑可以正常运行无错误
  • (在不依赖远程系统的前提下)从公司防火墙之后测试代码变动
  • 确保无论自己的代码或Akamai的JavaScript版本如何变化,相关业务逻辑都能正常生效

本文将向大家介绍如何通过Jest设置单元测试套件,以确保业务逻辑正常运行,随后顺利部署变动的代码并降低回归风险。

一、背景知识

Jest无需额外配置即可使用,它可以算得上是最容易学习的框架之一。由于npm或node中未提供可实现类似功能的软件包,因此我们创建了一个Jest mock范例,可供大家使用Node.js通过EdgeWorkers API测试JavaScript代码。通过这些手工创建的Mock即可更精确地控制相关函数。

Akamai的EdgeWorkers代码库为EdgeWorkers API提供了一系列Jest mock。此外,Akamai EdgeWorkers执行环境也提供了一系列模块和对象。

注意:测试将在Node中执行,但Node和EdgeWorkers都在V8之上运行,EdgeWorkers中的一些功能已被明确禁用,此外EdgeWorkers还存在一些执行方面的限制(主要是在时间和内存方面),开发者需要注意这些问题,不要在测试中引入Node API。

接下来一起看看具体该怎么做吧。

二、EdgeWorkers的结构

EdgeWorkers的结构如下:

src ——我们的Main.js和Bundle.json的所在位置,所有其他模块也应该保存在这里。

test —— 单元测试

三、创建并运行测试

步骤1:启动一个新项目

我们可以执行如下命令新建一个项目:

步骤2:安装Node模块

接下来获取需要安装的Node模块,并配置相关文件。

该项目所需的Mock已经以Node模块的形式发布至edgeworkers-jest-mocks,请运行下列命令安装该模块:

步骤3:设置Package.json

请确保自己的Package.json文件中包含下列配置:

  • 为Jest设置测试脚本

  • 配置Jest

首先需要配置Jest,这样才能更容易地导入EdgeWorkers API Mock。

步骤4:设置Babel.config.json

Babel已作为依赖项包含在内,借此提供Akamai EdgeWorkers所用的新版ECMAScript对应的信息。要正确配置该文件,我们只需将如下内容加入babel.config.json文件即可。

注意:如果该文件不存在,只需创建一个JSON文件并将其更名为babel.config.json即可。

步骤5:编写测试

在从Main.js文件导入EdgeWorker或其函数后,即可开始编写自己需要的任何类型的测试。针对EdgeWorker event handlers编写的测试需要创建一个Request或Response Mock,随后用该Mock调用Event handler函数。

如下内容展示了一个针对EdgeWorker的Jest测试范例,该测试位于src/main.js中:

步骤6:运行测试

测试是由Jest框架提供的。要运行我们自己的单元测试,请通过命令行执行如下命令:

上述命令可以按照Jest的方式运行Test目录中的所有测试。

借助Jest针对EdgeWorkers边缘应用程序进行单元测试的方法就是这么简单。如果想要进一步了解相关技术,可参阅下列资源。Akamai还会持续提供更丰富的开发者工具和资源,帮助大家更轻松、快捷地使用Akamai提供的服务。

参考资源

  • EdgeWorkers Test Mocks GitHub
  • Jest
  • EdgeWorkers developer page
  • EdgeWorkers user guide
  • EdgeWorkers API guide
  • Akamai CLI for EdgeWorkers
  • EdgeKV getting started guide
注意:随着时间流逝,上述方法中的相关步骤可能会有所变化。最新方法请访问 GitHub。

如果在使用上述范例代码时遇到任何问题,也欢迎通过GitHub提交Issue,或通过EdgeWorkers Slack space与我们的开发者联系。

万物互联时代,边缘计算正加速向我们靠近,无论远程医疗、流畅低时延的智能生活,或是智能驾驶,背后都有它的身影。这就需要从底层基础架构到上层应用,都为这种全新的模式做好充分准备。

Akamai在边缘计算领域提供了完善的解决方案,同时也通过各类辅助性技术帮助开发者更高效、快速、敏捷地开发能在边缘运行的各类应用程序。

本文从测试角度为边缘应用程序的开发提供了一种新思路,欢迎关注Akamai机构号,了解更多技巧和知识。同时,也期待着更多组织和个人开发者能借助快速发展的边缘技术塑造更多精彩!

相关文章:

基于EdgeWorkers的边缘应用如何进行单元测试?

随着各行各业数字化转型的持续深入,越来越多企业开始选择将一些应用程序放在距离最终用户更近的边缘位置来运行,借此降低延迟,提高应用程序响应速度,打造更出色的用户体验。 相比传统集中部署和运行的方式,这种边缘应…...

【linux】校招中的“熟悉linux操作系统”一般是指达到什么程度?

这样,你先在网上找一套完整openssh升级方案(不是yum或apt的,要源码安装的),然后在虚拟机上反复安装测试,直到把他理解了、背下来。 面试的时候让你简单说说linux命令什么的,你就直接把这个方案…...

【CSS系列】常用容易忽略的css

user-select user-select 是一个 CSS 属性,用于控制用户是否可以选择文本。通过设置 user-select 的值,可以决定用户是否可以选择元素中的文本,以及如何选择文本。 auto:默认值。浏览器可以选择文本。none:用户不能选…...

Java 数据结构 二叉树(二)红黑树

目录 数据结构图-树 简介 规则 旋转 重新着色 红黑树构建过程 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步&#xf…...

React18-完成弹窗封装

弹框封装 用法 // 创建 userRef.current?.open(create) // 修改 userRef.current?.open(edit,values){/* 创建用户 */} <CreateUser mRef{userRef} update{} />组件暴露open方法 文档地址&#xff1a;https://react.dev/reference/react/useImperativeHandle useIm…...

蓝桥杯2024/1/31-----底层测试模板

和之前一样建好工程文件夹&#xff0c;里边包含User&#xff08;放工程文件&#xff0c;mian.c&#xff09;、Driver&#xff08;存放底层文件如Led.c&#xff0c;Led.h等&#xff09; 新建的工程先搭建框架&#xff0c;可以先书写底层函数&#xff08;此次书写了四个函数并包含…...

蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度

目录 前言 1 题目描述 2 分析 2.1 关键代码 2.2 关键代码分析 3 代码 前言 详细的代码里面有自己的理解注释 1 题目描述 给定两个非负整数&#xff08;不含前导 00&#xff09; A 和 B&#xff0c;请你计算 AB 的值。 输入格式 共两行&#xff0c;第一行包含整数 A&a…...

C++设计模式-里氏替换原则

里氏替换原则定义了继承规范。&#xff08;封装、继承、多态&#xff09; 定义1&#xff1a;类型S对象o1&#xff0c;类型T对象o2&#xff0c;o1换成o2时程序意图不变&#xff0c;那么S是T的子类。 定义2&#xff1a;使用子类不破坏父类的意图。 注意&#xff1a;如果子类不…...

compose LazyColumn + items没有自动刷新问题

val dataLists by remember { mutableStateOf(datas) } 数据更改后列表不刷新问题。 val dataLists by remember { mutableStateOf(datas) } LazyColumn(modifier Modifier.padding(top 5.dp)) {items(dataLists) {....}} 可以将mutableStateOf 改为mutableStateListOf解决…...

Java八大常用排序算法

1冒泡排序 对于冒泡排序相信我们都比较熟悉了&#xff0c;其核心思想就是相邻元素两两比较&#xff0c;把较大的元素放到后面&#xff0c;在一轮比较完成之后&#xff0c;最大的元素就位于最后一个位置了&#xff0c;就好像是气泡&#xff0c;慢慢的浮出了水面一样 Jave 实现 …...

编程笔记 html5cssjs 075 Javascript 常量和变量

编程笔记 html5&css&js 075 Javascript 常量和变量 一、JavaScript 变量二、JavaScript 常量三、示例&#xff1a;小结&#xff1a; 在JavaScript中&#xff0c;变量和常量是用来存储数据的占位符。它们的主要区别在于可变性&#xff1a;变量的值可以改变&#xff0c;而…...

题目 1159: 偶数求和

题目描述: 有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff08;公差为2的等差数列&#xff09;&#xff0c;现在要求你按照顺序每m个数求出一个平均值&#xff0c;如果最后不足m个&#xff0c;则以实际数量求平均值。编程输出该平均值序…...

呼吸灯--FPGA

目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮&#xff0c;再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是&#xff0c;首先灯是在第一个时钟周期保持高电平熄灭状态&#xff0c;在第二个时钟周期保持1/1…...

MySQL数据库①_MySQL入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库&#xff0c;服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...

虚幻UE 特效-Niagara特效实战-魔法阵

回顾Niagara特效基础知识&#xff1a;虚幻UE 特效-Niagara特效初识 其他四篇实战&#xff1a;UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...

你在做绩效考核,还是绩效管理?二者有什么区别

绩效考核&#xff0c;为什么99%都失败&#xff0c;最后一地鸡毛&#xff1f;败在指标&#xff01; 绩效管理&#xff0c;为什么大多数企业都能成功&#xff0c;而且越做越好&#xff1f;成在目标&#xff01; 丢掉层层指标&#xff0c;人人制定目标&#xff0c;这是企业重新定…...

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...

C系列-柔性数组

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 ​编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的&#xff0c;C99中&#…...

网络安全学习(面试题)

1、jeecg框架有哪些漏洞&#xff0c; 弱口令漏洞&#xff0c;admin/123456&#xff0c;jeecg/123456&#xff0c;jeecg/jeecg123 信息泄露&#xff0c;接口任意用户密码重置&#xff0c;sql注入等历史漏洞&#xff0c;用工具一键梭哈 找了好久&#xff0c;一直都没找到学校关于…...

7天掌握LAV Filters:构建终极DirectShow媒体解码方案完全指南

7天掌握LAV Filters&#xff1a;构建终极DirectShow媒体解码方案完全指南 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于FFmpeg的开源…...

OpenClaw电商运营助手:Qwen2.5-VL-7B批量生成商品图文详情

OpenClaw电商运营助手&#xff1a;Qwen2.5-VL-7B批量生成商品图文详情 1. 为什么需要自动化商品详情生成 每次大促前&#xff0c;运营团队最头疼的就是商品详情页的批量更新。去年双十一前&#xff0c;我手动处理了200多个SKU的图文优化&#xff0c;连续加班一周后&#xff0…...

如何快速实现jsTree上下文菜单:为树形节点添加智能右键操作功能

如何快速实现jsTree上下文菜单&#xff1a;为树形节点添加智能右键操作功能 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree上下文菜单插件是jQuery树形插件中最实用的功能之一&#xff0c;它能让用户通过右键点…...

如何在 React 中正确绑定 onClick 事件以避免类型错误

React 中 onClick 期望接收一个函数&#xff0c;若传入字符串或直接执行表达式&#xff08;如 window.href...&#xff09;会导致“Expected onclick listener to be a function”报错&#xff1b;正确做法是使用箭头函数包裹逻辑。 react 中 onclick 期望接收一个函数&am…...

手把手教你使用Qwen3.5推理模型:从部署到实战问答全流程

手把手教你使用Qwen3.5推理模型&#xff1a;从部署到实战问答全流程 1. 模型介绍与特点 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版本以 G…...

山东大学软件学院项目实训-创新实训-医院自助服务系统(二)

时间&#xff1a;2026.3.27-4.5 工作内容&#xff1a;智能诊断书扫描功能开发&#xff08;初步&#xff09;&#xff0c;SpringBoot 通义千问VL实现智能诊断书识别 - 医疗自助服务系统开发实践 一、模块开发背景 在本次创新项目实训中&#xff0c;我负责开发“智愈”医疗自助…...

OpenClaw技能组合拳:Qwen3.5-9B实现多步骤跨境电商运营

OpenClaw技能组合拳&#xff1a;Qwen3.5-9B实现多步骤跨境电商运营 1. 为什么选择OpenClaw做跨境电商自动化&#xff1f; 去年夏天&#xff0c;我接手了一个跨境电商副业项目。每天需要手动处理商品信息抓取、多语言翻译、定价调整和库存同步&#xff0c;很快发现人工操作不仅…...

2026届最火的五大降AI率方案推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 得从语言、逻辑以及细节这三方面着手&#xff0c;来降低AI生成内容所留下的痕迹。在语言方面…...

老旧电脑焕新生:OpenClaw+Qwen3-4B低资源占用优化方案

老旧电脑焕新生&#xff1a;OpenClawQwen3-4B低资源占用优化方案 1. 为什么需要低资源优化方案 去年我翻出一台2015款的MacBook Air&#xff0c;4GB内存的配置在当下连开几个Chrome标签页都吃力。但作为技术爱好者&#xff0c;我总想让它发挥余热。当我尝试在这台设备上运行O…...