云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云主机_阿里云acp考试通过率_三重好礼

小七 141 0

Cloudflare工作人员中的单元测试人员

我们最近写了一篇关于在模拟环境中使用CloudWorker(a)对Cloudflare worker进行单元测试的文章节点.js基于Dollar Shave Club工程团队创建的模拟Cloudflare工人环境)。见单元测试人员函数。偶数尽管Cloudflare工人在几秒钟内就可以在全球范围内进行部署,但软件开发人员通常选择使用本地模拟环境,以便在本地计算机上进行开发时获得尽可能快的反馈循环。CloudWorker非常适合这个用例,但由于它仍然是一个模拟环境,因此不能保证运行时或环境与所有Cloudflare Worker api和特性完全相同。这个差距会让开发人员感到不安,因为他们不能百分之百地确定他们的测试会在生产中成功环境。在这个帖子,我们将演示如何生成Cloudflare Worker兼容的测试工具,它可以直接在Cloudflare产品中执行mocha单元测试环境.目录设置为项目创建新文件夹,将其更改为您的工作目录并运行npm init初始化包.json文件。运行mkdir-p src&&mkdir-p test/lib&&mkdir dist创建下一步使用的文件夹。你的文件夹应该看起来像这个:。/距离./src公司/工人.js/测试./测试/lib./包.jsonnpminstall--save dev mocha exports loader webpack webpack cliThis will install mocha(单元测试框架),Webpack(一种用于将代码打包成单个Worker脚本的工具)和Exports Loader(Webpack用于将Worker脚本导入基于Worker的Mocha中的工具)环境.npminstall—保存dev git+https://github.com/obezuk/mocha-loader.githis将安装Webpack的mocha loader的修改版本。它已被修改为支持Web Worker环境类型。我们很高兴看到Web Worker支持合并到Mocha Loader中,因此请在此处投票支持我们的请求:https://github.com/webpack-contrib/mocha-loader/pull/77示例script在/src中创建您的辅助脚本/工人.js:addEventListener('fetch',事件=>{事件响应(手柄请求(事件请求))})异步函数加法(a,b){返回a+b}异步函数handleRequest(请求){const added=等待添加(1,3)返回新的响应(`Sum is${added}!`)}添加测试在./test中创建单元测试/测试.test.js:const assert=require('assert')描述('工人测试',函数(){it('返回一个表示和为4'的体,异步函数(){let url=新url('https://worker.example.com')let req=新请求(url)let res=等待处理请求(req)让身体=等待res.文本()断言相等(body,'总和是4!')})it('正确执行加法操作',async function(){设res=等待加法(1,1)断言相等(res,2)})})为了在Cloudflare Workers中执行Mocha和单元测试,我们将构建一个测试工具。Test-Harness脚本看起来很像普通的Worker脚本,但是它集成了您的./src/工人.js和/测试/测试.test.js到能够在Cloudflare Worker中执行Mocha单元测试的脚本中运行时。创建/test/lib/serviceworker mocha中的以下脚本-harness.js.导入"摩卡";导入"摩卡装载机!"!。。/测试.test.js';var测试结果;异步函数mochaRun(){返回新承诺(功能(接受、拒绝){无功转轮=摩卡。快跑(功能(){测试结果=运行程序测试结果;接受();});});}addEventListener('fetch',事件=>{事件响应(手把手调查(事件请求))});异步函数handleMochaRequest(请求){如果(!试验结果){等待mochaRun();}var headers=新标题({"content type":"应用程序/json"})无功状态码=200;如果(测试结果.失败!=0){状态码=500;}返回新响应(JSON.stringify(测试结果){"状态":状态码,"标题":标题});}对象.分配(全球,要求('exports-loader?handleRequest,添加!。。/../src公司/工人.js'));Mocha Web包配置在项目根目录中创建一个名为:/webpack.mocha.config.js。Webpack使用此文件将测试工具、辅助脚本和单元测试捆绑到一个可部署到的单个脚本中Cloudflare.module.exports= {target:'网络工作者',条目:"./test/lib/servicework mocha-线束.js",模式:"开发",优化:{最小化:false},性能:{提示:错误},节点:{fs:'空'},模块:{exprContextCritical:错误},输出:{路径:yu dirname+"/dist",publicPath:"dist",文件名:"工人摩卡"-线束.js"}};您的文件结构应该如下所示(不包括node\u模块):。/距离./src公司/工人.js/测试/测试.test.js./test/lib/servicework摩卡-线束.js./包.json/包装-锁定.json./webpack.mocha.config.js公司定制测试安全带。如果您希望扩展测试工具来支持您自己的测试文件,您需要将额外的测试导入添加到脚本:导入"摩卡装载机!/*此处为测试文件名*/'如果您希望将其他函数从您的Worker脚本导入到test harness环境中,则需要将它们添加到最后一个以逗号分隔的函数行:Object.assign(全球,要求('exports-loader?/*此处使用逗号分隔函数名*/!。。/../src公司/工人.js'));运行测试工具部署和运行测试工具与使用网页包。修改脚本部分包.json要包含构建线束命令,"脚本":{"build harness":"webpack--config"webpack.mocha.config.js-p--进度--颜色"}在项目根目录中运行命令npm run build harness来生成您的Worker脚本、Mocha和您的单元测试,并将它们绑定到./dist/Worker Mocha中-harness.js.上传此脚本将测试Cloudflare workers路由并运行curl--failhttps://test.example.org。如果单元测试成功,它将返回200个响应,如果单元测试失败了反应。整合在现有的CI/CD管道中,您可以使用我们的API将Cloudflare Workers和测试工具集成到现有的CI/CD管道中:https://developers.cloudflare.com/workers/api/测试工具以JSON格式返回详细的测试报告格式:示例成功回应{"统计":{"套房":1,"测试":2,"通行证":2,"待定":0,"失败":0,"start":"2019-04-23T06:24:33.492Z","end":"2019-04-23T06:24:33.590Z","持续时间":98},"测试":[{"title":"返回一个表示和为4的正文","fullTitle":"Worker Test返回一个表示和为4的主体","持续时间":0,"currentRetry":0,"错误":{}},{"title":"加法正确","fullTitle":"Worker Test正确进行加法","持续时间":0,"currentRetry":0,"错误":{}}],"待定":[],"失败":[],"通行证":[{"title":"返回一个表示和为4的正文","fullTitle":"Worker Test返回一个表示和为4的主体","持续时间":0,"currentRetry":0,"错误":{}},{"title":"加法正确","fullTitle":"Worker Test正确进行加法","持续时间":0,"currentRetry":0,"错误":{}}]}故障响应示例{"统计":{"套房":1,"测试":2,"通过":0,"待定":0,"失败":2,"start":"2019-04-23T06:25:52.100Z","end":"2019-04-23T06:25:52.170Z","持续时间":70},"测试":[{"title":"返回一个表示和为4的正文","fullTitle":"Worker Test返回一个表示和为4的主体","持续时间":0,"currentRetry":0,"错误":{"name":"断言错误","实际":"总和是5!","expected":"总和是4!","运算符":"==","message":"总和是5!"=='总和是4!'","generatedMessage":正确,"stack":"AssertionError:'总和为5!'=='总和是4!'\n在上下文中。(工人。js:19152:16英寸)}},{"title":"加法正确","fullTitle":"Worker Test正确进行加法","持续时间":0,"currentRetry":0,"错误":{"name":"断言错误","实际":"3","预期":"2","运算符":"==","message":"3==2","generatedMessage":正确,"stack":"AssertionError:3==2\n上下文。(工人。js:19157:16英寸)}}],"待定":[],"失败":[{"title":"返回一个表示和为4的正文","fullTitle":"Worker Test返回一个表示和为4的主体","持续时间":0,"currentRetry":0,"错误":{"name":"断言错误","实际":"总和是5!","expected":"总和是4!","运算符":"==","message":"总和是5!"=='总和是4!'","generatedMessage":正确,"stack":"AssertionError:'总和为5!'=='总和是4!'\n在上下文中。(工人。js:19152:16英寸)}},{"title":"加法正确","fullTitle":"Worker Test正确进行加法","持续时间":0,"currentRetry":0,"错误":{"name":"断言错误","实际":"3","预期":"2","运算符":"==","message":"3==2","generatedMessage":正确,"stack":"AssertionError:3==2\n上下文。(工人。js:19157:16英寸)}}],"通过":[]}这非常强大,可以让您直接在Cloudflare运行时中执行单元测试,从而在将代码发布到生产环境之前让您更有信心。我们希望这是有用的,并欢迎任何反馈。