You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// TDDsuite('Array',function(){setup(function(){});test('equal -1 when index beyond array length',function(){assert.equal(-1,[1,2,3].indexOf(4));});});// BDDdescribe('Array',function(){before(function(){});it('should return -1 when no such index',function(){[1,2,3].indexOf(4).should.equal(-1);});});
varassert=require('assert');describe('Array',function(){describe('#indexOf()',function(){it('should return -1 when the value is not present',function(){assert.equal([1,2,3].indexOf(4),-1);});});});
单元测试类别
单元测试分为TDD(测试驱动开发)和BDD(行为驱动开发),这两种有什么区别呢?
顾名思义,TDD 的开发模式是先写测试,通过测试驱动开发,开发流程如下:
而BDD则是通过基于需求文档先行开发,按预期行为进行构建功能。BDD的写法更语义化.
行为驱动的创始人本质上希望产品能通过描述用户行为路径,来自动生成测试用例,从而回归开发代码,BDD希望产品以及业务人员能参与到开发流程当中,从而减轻开发者或测试写测试用例的成本。
对比两者代码如下:
测试框架
运用框架的目的是帮助我们提高效率,避免将精力花费在无关紧要的事情上。测试框架,也就是运行测试的工具。目前比较流行的是jasmine以及Mocha。
mocha的用法
安装
在命令行执行
npm install --global mocha
全局安装或者在项目中单独使用:
npm install --save-dev mocha
基本使用
看如下官网中的例子,每个测试脚本应该包含一个或多个describe(测试套件),每个describe里面应有一个或多个it(测试用例),值得注意的是,测试脚本的命名应该与要测试的模块同名,但后缀名必须是.test.js
掌握常用的命令:
运行脚本mocha testFile.test.js
运行多个脚本mocha test1.test.js test2.test.js test3.test.js
监听脚本变化,自动运行mocha: mocha --watch
只要有个脚本不过就不再执行下面的脚本: mocha --bail
执行用名字搜索的测试用例: mocha --grep '用例名'
只运行不符合条件的测试用例:mocha --grep '用例名' --invert
断言库
Mocha为了保证自身的灵活性,不提供断言API,所以你可以选择各种你喜欢的断言库。Node.js 核心库 Assert、should.js、expect.js、chai是几个常用的断言库。下面是几个常用的断言库的语法对比:
可以看到should.js的语义化特别好,就像是读英文。
Q:怎么选型?
A:不根据业务需求的选型都是耍流氓,自己的产品是什么,场景是什么,技术优缺点是什么,综合判断再选。不要轻易说选什么技术。
参考链接
TDD和BDD的区别:http://ilucas.me/2016/03/07/difference-between-tdd-and-bdd/
mocha教程:http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
了解karma:http://taobaofed.org/blog/2016/01/08/karma-origin/
持续集成服务 Travis CI 教程:http://www.ruanyifeng.com/blog/2017/12/travis_ci_tutorial.html
The text was updated successfully, but these errors were encountered: