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
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
单元测试是好代码必经的一步。在python中我使用过内置库unittest,相对来说,比较简单。如果你在知乎上了解到thoughtwork这公司,你会清楚地认识到测试的重要性,thoughtworks非常推崇TDD,也就是先写测试再开始编码,这样看似效率较低,但是却有效提高了代码质量,也很好满足你对需求的测试。单元测试会涉及到两个概念,BDD和TDD。
Javascript的测试框架非常多,参考在Node.js上用什么测试框架好,在Node.js中,mocha应该是测试框架中的首选。在这里,主要介绍mocha,should.js和chai.js。
mocha
mocha本身只是一个单元测试框架,可以兼容第三方断言库。
使用
参考brandonxiang/interpolator中的测试用例。
describe
用于描述你需要单元测试的对象,内嵌几层,把整个过程详细描述。it
用于描述你需要单元测试的行为,闭包的函数是测试的内容,测试内容依靠断言库。should.js
这是一个非常像自然语言语句的断言库。
如果你遇到的测试情况是数字5应该是准确的5,且是一个数字。
同时,你想要检验它的内部属性。
chai.js
这是一个非常常用的断言库。
判断它等于某个值
判断它是否为true
判断它属性某个类型
判断它的长度
判断它属性的长度
should和expect
should
和expect
之间的区别在于,它考虑到ie的错误点,保证浏览器的兼容性。还有非常多的相关项目,它们可以辅助你完成断言测试。
Error
constructor thrown upon an assertion failing.用例
用例1 如何在es6中使用mocha
Node.js笔记七:es6中,我提到了es6的一些优势。es6已经很流行,如何在mocha与es6配合就像是一个必修课。参考Testing in ES6 with Mocha and Babel 6,需要的步骤不多。主要还是在于你对babel的了解。
babel-core
更像一个引用钩子,而babel-preset-es2015
则是es2015/es6的语法转换标准。由于mocha并不会自动帮你写配置文件,所以你需要自己手动在项目的根目录底下编写
.babelrc
。这里只展示最基础的es2015,至于react和stage-0等,可以根据个人项目的需要自行添加,请自行研究。配置完成后,只需运行以下代码,即可用es6写mocha的测试用例。具体写法可以参考brandonxiang/weapp-i18n这个开源项目。
用例2 vue-cli项目中的单元测试
如今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
。babel-polyfill是用于模拟es2015更多是在应用的情况下,非第三方库的情况下。这意味着你能用一些内置方法像
Promise
或者WeakMap
,静态方法像Array.from
或者Object.assign
,实例方法像Array.prototype.includes
,和生成器。polyfill
帮你加进去全局变量像原始数据类型String一样。在karma的配置文件
karma.conf.js
中添加:The text was updated successfully, but these errors were encountered: