热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:前端单元测试以及自动化构建入门

篇首语:本文由编程笔记#小编为大家整理,主要介绍了前端单元测试以及自动化构建入门相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了前端单元测试以及自动化构建入门相关的知识,希望对你有一定的参考价值。














前端单元测试以及自动化构建入门




前端单元测试以及自动化构建入门



















写在开头








本文涉及的知识点会比较广,所以每个知识点不会很深入,都有有对象的资料和demo,需要读者自己查漏补缺。学习最好的方法就是自己动手查阅资料的过程。希望这篇文章能够帮助到你。




所涉及的知识:


Node assert








mocha


should.js


karma


Travis CI

























先了解两个知识点








TDD


测试驱动开发是敏捷开发中的一箱核心实践和技术,也是一种设计方法论。在开发项目之前,先编写单元测试用例,基本思路是通过测试用例来推动整个项目开发,但也不仅仅只是单纯的测试工作,我们依然可以在整个项目的需求分析、设计以及质量控制中灵活运用。




BDD


行为驱动其实在测试驱动开发上面的拓展,是着眼于想要实现的业务行为,核心是设计,并引导整个团队更好的前进。


Node assert的api大家自己看一下,还是掌握其中几个经常用到的,比如assert.strictEqual、assert.fail以及assert.throws



















简单讲一下mocha








mocha是个测试框架工具,浏览器和Node环境都可以运行。 mocha的官网文档写的真的是,阅读起来实在太痛苦了,可能作者喜欢这种流水式的写法。




先来看一个简单的例子,一下代码的运行环境需求node,还需要全局安装mocha。具体代码可以查看我的github里的exercise1




















var assert = require('assert')  
describe('#indexOf()'function ({  
it('should return -1 when the value is not present'function ({
  assert.equal(-1, [123].indexOf(4))  
  })  
  })





上面是其中一个测试用例,它可以单独执行,先引入一个断言库asset,断言库还有很多,比如chai;




基本写法就一个describe块包含至少一个it块。




describe块被称为"测试套件"(test suite),表示一组单元测试。第一个参数用来编写描述用例的功能和结果,第二个参数实际执行的函数。




it块被称为"测试用例"(test case),表示一个单独的测试,第一个参数是测试用例的名称,第二个参数是一个实际执行的函数。



















mocha 基本用法








在控制台通过一下语法运行脚本: mocha test/test.js


 


就会得到如下结果:




前端单元测试以及自动化构建入门




mocha 命令后面可以紧跟多个测试脚本的路径:mocha url1 url2 url3




mocha也有属于自己生命周期,看取名基本就明白意思了。


































  describe('hooks'function({  before(function({  //所有测试用例的统一前置动作  });  after(function({  //所有测试用例的统一后置动作  });  beforeEach(function({  // 每个测试用例的前置动作  });  afterEach(function({  // 每个测试用例的后置动作  });  });




还有很多方法,具体可以看下阮大神的mocha教程,更加通俗易懂,当然看官网文档还是最全面的。



















should.js 简读








should.js的api就多了,我是没有全部用过,平时用的最好的也就那么几个,这种链式写法是不是有中JQ的感觉。写起来如行云流水,真舒服。在环境运行是最常见到的就是明明装了should模块,却报错说cannot find module 'should',如下图。心中有一万只草泥马奔过,路骂,你是不是瞎呀。。。哈哈。小伙子不要急躁,所谓代码虐我千百遍,我待代码如初恋。找不到should模块是有原因的,一般尝试降低些版本。毕竟外国鵀用的linux多,对于windows还是支持没那么快。或者换个淘宝镜像再重新npm下。也许就跑通了。


  前端单元测试以及自动化构建入门




项目例子在这里,下面展示部分代码




























 var should = require('should');  
 var add = require('../lib/add');  
 describe('大数相加add方法'function ({  
 it('字符串"42329"加上字符串"21532"等于"63861"'function ({  
 add('9987''987')  
 .should.equal('10974')  })  
 it('"843529812342341234"加上"236124361425345435"等于"1079654173767686669"'function ({  
 add('843529812342341234''236124361425345435')  
 .should.equal('1079654173767686669')  
 })  
 })



单元测试实现的一个大数相加的功能,涉及的知识点还是蛮多的。大家仔细解题还是会有很多收获的。至于哪些知识点,就靠你自己去挖掘了。




最后通过后如下图所示:


  前端单元测试以及自动化构建入门



















karma是个什么东东








karma是google angular团队开源的产品,主要目的就是给开发人员提供一个高效的测试环境。就如同一个脚手架,你只需要设置简单的配置即可,然后编写测试代码就能获得你想要的结果,是一个提高团队生产力和创造力的强有力的工具。




安装步骤




















//选全局安装karma-cli  
npm install -g karma-cli  
//然后在你的项目里安装karma  
npm i karma -D  
//安装一些插件  
npm i npm install karma-jasmine karma-chrome-launcher   
jasmine-core --save-dev


接下里初始化karma,在上面项目的根目录下使用下面命令: karma init。




按照如下配置选择配置项:


















 1. Which testing framework do you want to use ? (mocha) 
 2. Do you want to use Require.js ? (no) 
 3. Do you want to capture any browsers automatically ? (Chrome) 
 4. What is the location of your source and test files ? (https://cdn.bootcss.com/jquery/2.2.4/jquery.js, node_modules/should/should.js, test/**.js) 
 5. Should any of the files included by the previous patterns be excluded ? () 
 6. Do you want Karma to watch all the files and run the tests on change ? (yes)





















karma.conf.js的配置文件











最后一步结束后就会在项目根目录中出现一个karma.conf.js的配置文件。我们来看下几个比较重要的配置项。




1、frameworks


所依赖的测试工具,我这里是用了mocha,你也可以使用默认的jasmine




2、files




3、browsers


所依赖的浏览器环境,一般是填写Chrome,我的Chrome浏览器是需要填写Chrome_travis_ci才行。并安装karma-chrome-launcher插件。




4、singleRun


默认是false,如果是true,运行karma start只会测试一次测试用例,然后返回结果并退出。




5、autoWatch


默认为true,实时监听文件的修改,当有修改时就会重加加载测试用例,有点热加载的意味。




通过下面命令跑起整个项目:karma start




你会发现浏览器自动打开了一个如下图所示的页面:




 前端单元测试以及自动化构建入门




然后点击DEBUG按钮,跳转到另外一个页面,这时候打开控制台,你就会看到一个配置加载好的页面,这时候你就惊讶原来karma的设计思想是这样的。




前端单元测试以及自动化构建入门






前端单元测试以及自动化构建入门



















Travis CI 的作用又是什么








我们先了解下什么持续集成。




通俗点讲,就是每天都要向老板报告一天的工作情况,并且还要反思总结。专业性点讲就是每天将代码集成到主干。




优点


1、快速发现错误,可以说当日问题当日解决,不留隐患。


2、因为集成的频繁,所以分支并不会大幅度偏离主干。




Travis CI就是一个持续集成的工具,并且集成了GitHub,能够自动化的构建和测试操作,并且对公有的仓库free,这是极大的有利于开源项目的健康发展呀,我们就可以很方便,高效的维护开源项目。




要使用这么强大的功能,第一步是配置文件,在我们项目的根目录中创建一个.travis.yml文件。这个文件就包含了Travis CI需要用到的配置和指令。比如项目中常用的几个配置。具体请自行查看:
































  //编程语言所需的环境  language: node_js  node_js:  - "10"  - "8"  //执行的脚本  script:   node_modules/karma/bin/karma start karma.conf.js --single-run  //脚本运行前不要安装的内容  before_install:  - export CHROME_BIN=chromium-browser  - export DISPLAY=:99.0  - sh -e /etc/init.d/xvfb start






项目中配置好.travis.yml文件后,提交代码到远程github仓库,然后打开travis-cli上和你的github已经关联好的仓库,如下图所示:


 前端单元测试以及自动化构建入门




页面上那个taggle按钮就是是否开启自动化构建,这时候把exercise3项目打开,并点击进去详情,就会看到一个已经构建成功的项目。如果想重新构建也可以点击more options选择tiragger build,见下图:


  前端单元测试以及自动化构建入门




到这里,一个简单的项目算是构建成功了。













前端单元测试以及自动化构建入门



前端单元测试以及自动化构建入门




公司官网:www.litboy.net


于老师简介:www.litboy.cn


最新课程体系更新:www.litboy.org


尚脑教育:功德办学 良心施教







前端单元测试以及自动化构建入门






























推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
author-avatar
天蝎樱花西街1992
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有