转载自:http://www.jianshu.com/p/0628ce43b6e0
源码github地址在此,记得点星:
https://github.com/brandonxiang/example-mocha
单元测试是好代码必经的一步。在python中我使用过内置库unittest,相对来说,比较简单。单元测试会涉及到两个概念,BDD和TDD。
- BDD 行为驱动开发(Behavior Driven Development)根据用户的行为需求去指导开发流程
- TDD 测试驱动开发(Test-Driven Development)先编写单元测试用例代码,测试代码确定需要编写什么产品代码
Javascript的测试框架非常多,参考在Node.js上用什么测试框架好,在Node.js中,mocha应该是测试框架中的首选。在这里,主要介绍mocha,should.js和chai.js。
mocha
mocha本身只是一个单元测试框架,可以兼容第三方断言库。
使用
参考brandonxiang/interpolator中的测试用例。
describe
用于描述你需要单元测试的对象,内嵌几层,把整个过程详细描述。
it
用于描述你需要单元测试的行为,闭包的函数是测试的内容,测试内容依靠断言库。
should.js
这是一个非常像自然语言语句的断言库。
如果你遇到的测试情况是数字5应该是准确的5,且是一个数字。
(5).should.be.exactly(5).and.be.a.Number();
同时,你想要检验它的内部属性。
var user = {
name: 'tj'
, pets: ['tobi', 'loki', 'jane', 'bandit']
};
user.should.have.property('name', 'tj');
user.should.have.property('pets').with.lengthOf(4);
chai.js
这是一个非常常用的断言库。
var chai = require('chai');
var assert = chai.assert; // 用 Assert style
var expect = chai.expect; // 用 Expect style
var should = chai.should(); // 用 Should style
判断它等于某个值
expect(foo).to.equal('bar');
判断它是否为true
expect(foo).to.be.true;
判断它属性某个类型
expect(foo).to.be.a('string');
判断它的长度
expect(foo).to.have.lengthOf(3);
判断它属性的长度
expect(beverages).to.have.property('tea').with.lengthOf(3);
should和expect
should
和expect
之间的区别在于,它考虑到ie的错误点,保证浏览器的兼容性。
还有非常多的相关项目,它们可以辅助你完成断言测试。
- chaijs / chai-docs: The chaijs.com website source code.
- chaijs / assertion-error: Custom
Error
constructor thrown upon an assertion failing. - chaijs / deep-eql: Improved deep equality testing for Node.js and the browser.
- chaijs / type-detect: Improved typeof detection for Node.js and the browser.
- chaijs / check-error: Error comparison and information related utility for Node.js and the browser.
- chaijs / loupe: Inspect utility for Node.js and browsers.
- chaijs / pathval: Object value retrieval given a string path.
- chaijs / get-func-name: Utility for getting a function's name for node and the browser.
用例
如今vue-cli构建项目可以直接送你“一整套”单元测试和覆盖率的工具(使用的是karma
,mocha
和chai
)。
坑:错误vuex requires a Promise polyfill in this browser
使用vuex的项目在测试时会出现一个问题,参考Vue unit test error: vuex requires a Promise polyfill in this browser,需要安装babel-polyfill
。
npm install --save-dev babel-polyfill
在karma的配置文件karma.conf.js
中添加:
files: [
'../node_modules/babel-polyfill/dist/polyfill.js',
'index.js'
],
转载,请表明出处。总目录前端经验收集器
转载,请表明出处。总目录后端记事本