美文网首页
前端工程师看测试之TDD和BDD

前端工程师看测试之TDD和BDD

作者: 喵妈 | 来源:发表于2018-05-31 16:57 被阅读0次

最近报了一个前端进阶班,专注进行前端技能提升,第一课老师就要求预习mocha and should .js

what?一万个懵逼这是啥万一,搜索了一下mocha+should.js就是传说中的BDD测试框架,一直认为前端只要写好前端代码就好了,老师说大厂对前端有会写单元测试代码要求的,好的,老师说啥都对。

首先呢,什么是BDD,什么是TDD呢?

BDD:Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发这,QA和非技术人员之间的协作。

TDD:Test-Driven Development,就是测试驱动开发,它是一种测试先于编写代码的思想用于指导软件开发,测试驱动开发是敏捷开发中的一项核心时间和技术,也是一种设计方法论,TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码

对于测试,我一直认为是用于验证developer的代码是否符合需求,稍微了解TDD,BDD之后才发现,测试不仅仅是对于代码的验证,找出几个bug,更是一种约束一种规范,是与项目需求息息相关的

好了,废话 不多说直接来聊一聊mocha和should.js

啥是mocha呢?

Mocha是在Node.js和浏览器上运行的功能丰富的JavaScript测试框架,使异步测试变得简单有趣。mocha测试串行运行,允许灵活准确的报告,同时将未捕获的异常映射到正确的测试用例

其实mocha就是一个工具,首先我们需要命令行安装它,先创建一个test包

在test包里进行mocha的安装

npm install mocha

这样我们mocha就安装OK了

第二步就是测试脚本的写法

mocha的作用就是运行测试脚本,首先必须学会写测试脚本,所谓‘测试脚本’,就是用来测试源码的脚本

首先我们可以先写一个数字相加的需求,创建一个add.js

现在呢我们源码就写好了, 接下来要做的就是测试这个相加函数是不是正确,这时候就要写测试脚本,通常,测试脚本与所要测试的源码脚本同名,但是后缀名为 .test.js(表示测试)或者.spec.js(表示规格)

好,我们现在创建测试add函数的脚本,我们命名就叫add.test.js

然后里面打入这些验证代码

上面这代码呢,就是测试脚本吗,它可以独立执行,测试脚本里应该包含一个或多个describe块,每个describe块应该包括一个或多个it块

describe块称为‘测试套件“,表示一组相关的测试,它是一个函数,第一个参数是测试套件的名称(‘加法函数的测试”),第二个参数是一个实际执行的函数

it块称为‘测试用例‘,表示一个单独的测试,是测试的最小单位,也是一个函数,第一个参数是测试用例的名称(“1加1应该等于2”),第二个参数是一个实际执行的函数

运行测试

我们测试脚本写好了如何运行呢?

正常的呢,如果我们对于package.json里配置没有做任何修改呢,就按照官方的回到终端,进行命令运行


这样,对应的log就会答应出来

当然也可以配置,在package.json里进行配置。如图

加这么一句话,就OK了,接下来,我们直接在终端里输入mocha 回车,就可以直接运行测试了

断言测试

大家应该看到代码里有一句话是add(1,1).to.be.equal(2)

所谓断言,就是判断源码的实际执行结果与预期结果是否一直,如果不一致就抛出一个错误

所有的测试用例(it块)都应该含有一句或多句的断言,它是编写测试用例的关键,断言功能由断言库来实现,mocha本身不带断言库,所以我们需要引入断言库,上面用的是chai断言库,并且指定了它的expect断言风格,expect断言的优点是很接近自然语言,因为是看的阮一峰的git学写的,但是现在比较流行的应该是node的assert,是杨文坚老师推荐的,如下,有个对比

配置文件mocha.opts

MOcha允许在test目录下面,放置配置文件mocha.opts,把命令行参数写在里面。具体的可以查看官网,比如一个demo里mocha.opts文件里就一行代码

可以查看官网

就不多说啦

异步测试

mocha默认每个测试用例最多执行2000毫秒,如果到时没有得到结果,就报错,对于涉及异步操作的测试用例,这个时间往往是不够的,需要用-t或--timeout参数指定超时门槛

我们可以看一下阮一峰老师的demo

上面的测试用例,需要4000毫秒之后才有运行结果 ,所以需要-t或--timeout参数,改变默认的超时设置

上面命令将测试的超时时限指定为5000毫秒

另外,上面的测试用例里面,有一个done函数,it块执行的时候,传入一个done参数,当测试结束的时候,必须显式调用这个函数,告知macha测试结束了,否则,mocha就无法知道,测试是否结束,会一直等到超时报错。

而且呢,mocha内置对promise的支持,允许直接返回promise,等到它的状态改变,再执行断言,而不用显示调用done方法

。。。

。。。

测试用例也有一些对应的钩子

我上面好多举例的都是阮一峰老师的demo,我把他的git地址给大家

https://github.com/ruanyf/mocha-demos.git

只要把里面demo都跑一遍其实就差不多,当然老师用的是chai断言库和expect断言风格,可以尝试尝试node 的assert和should.js,都差不多

好啦,今天就结束啦!下面是我的git地址,大家可以一起互粉哦

https://github.com/Aimi-Ding

相关文章

  • 前端工程师看测试之TDD和BDD

    最近报了一个前端进阶班,专注进行前端技能提升,第一课老师就要求预习mocha and should .js wha...

  • 前端单元测试(一) - 入门向

    目录 概述为何要写测试前端测试的类型TDD vs BDD 常用前端单元测试框架JestMocha More前端测试...

  • iOS 实用工具 八 (转)

    测试 测试驱动开发/行为驱动开发(TDD / BDD) Kiwi – 一个用于 iOS 开发的 BDD 库。 Sp...

  • 软件开发中的拉动(续)

    BDD和TDD其实也是一种拉动,它们都是以终为始的一种方法。 BDD讲的是先把验收测试实例化,TDD是把设计到sp...

  • TDD vs BDD

    TDD vs BDD 什么是TDD?Test-Driven Development,测试驱动开发,是一种开发流程。...

  • 关于Vue单元测试的一些总结

    最近Vue项目要求用到单元测试,就这段时间用到的一些单元测试知识做一下总结。 TDD和BDD的概念 1.TDD(T...

  • 代码测试基本概念

    参考文章 [译]单元测试,TDD和BDD之间的区别是什么?[https://github.com/FrankKai...

  • 聊一下TDD和BDD

    TDD 和 BDD 分别是什么 BDD(Behavior Driven Development,行为驱动开发)和T...

  • TDD和BDD

    TDD(Test-Driven Development)——测试驱动开发 1.为什么使用TDD: 1)TDD根据客...

  • 自动化测试

    首先我们来看下什么是BDD,什么是TDD测试风格:测试驱动开发(Test-Driven Development,T...

网友评论

      本文标题:前端工程师看测试之TDD和BDD

      本文链接:https://www.haomeiwen.com/subject/igpqsftx.html