从这周开始,每周至少完成一篇分享~每周周六睡前完成本周的初步读文章分享,下周四睡前将上周的大问题修改完毕,将深入理解的知识补充完~必定要坚持下去~也但愿本身可以深入理解每个内容,若是你们发现文章中的问题或者有好的建议可直接留言,有好的相关文章也欢迎发给我~一块儿加油吧!javascript
node中文api文档
html
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,能够在任什么时候候启用和禁用断言验证,所以能够在测试时启用断言而在部署时禁用断言。assert主要是用于有确定结果的测试。java
assert(value, message), assert.ok(value, [message]) //判断中值是否为truenode
assert.ifError(value) //测试值是否不为 false,当为 true 时抛出。经常使用于回调中第一个 error 参数的检查。git
assert.fail(actual, expected, message, operator) //抛出异常,有message时显示 message,没有使用operator做为为分隔符程序员
assert.equal(actual, expected, [message]) //("=="判断)是否相等github
assert.notEqual(actual, expected, [message]) //("=="判断)是否不相等正则表达式
assert.strictEqual(actual, expected, [message]) //("==="判断)是否相等 相反:notStrictEqualshell
assert.notDeepEqual(actual, expected[, message]) // 是否深度匹配
assert.throws(block, [error], [message]) //声明一个block用于抛出错误,'error'能够是构造函数,验证函数或者正则表达式
assert.doesNotThrow(block, [message])//声明模块不抛出错误
TDD指的是Test Drive Development,很明显的意思是测试驱动开发,也就是说咱们能够从测试的角度来检验整个项目。大概的流程是先针对每一个功能点抽象出接口代码,而后编写单元测试代码,接下来实现接口,运行单元测试代码,循环此过程,直到整个单元测试都经过。这一点和敏捷开发有相似之处。
BDD指的是Behavior Drive Development,也就是行为驱动开发。BDD用天然语言来描述,让开发、测试、BA以及客户都能在这个基础上达成一致。由于测试优先的概念并非每一个人都能接受的,可能有人以为系统太复杂而难以测试,有人认为不存在的东西没法测试。因此,咱们在这里试图转换一种观念,那即是考虑它的行为,也就是说它应该如何运行,而后抽象出能达成共识的规范。
mocha是一款功能丰富的javascript单元测试框架,它既能够运行在nodejs环境中,也能够运行在浏览器环境中。mocha会串行地执行咱们编写的测试用例,能够在将未捕获的异常映射到对应测试用例(?这里是指的哪部分)的同时,保证输出灵活准确的测试结果。
mocha会生成一个包在最外面的describe函数
var assert = require('chai').assert; //断言模块chai中的assert风格
describe('用例集描述string', function() { // "测试套件"(test suite),表示一组相关的测试
it('用例的描述string', function() { //it为一个测试用例,用例经过后会在描述前打勾
// function为用例的内容
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
});
});复制代码
callback:x
describe('User', function() {
describe('#save()', function() {
it('should save without error', function(done) {
var user = new User('Luna');
user.save(function(err) {
if (err) throw err; //判断用例执行成功与否是在异步代码的回调里边完成的
done(); // 通知Mocha测试结束
/* user.save(done); // 异步代码中逻辑错误时,会在回调中抛出一个错误,直接这样写便可 */复制代码
});
});
});
});复制代码
promise: 让用例函数返回一个promise对象来进行正确性判断
不建议使用箭头函数~~
describe('hooks', function() {
before('可选:描述string',function [funName可选] () {
// runs before all tests in this block
});
after(function() {
// runs after all tests in this block
});
beforeEach(function() {
// runs before each test in this block
});
afterEach(function() {
// runs after each test in this block
});
// test cases
});复制代码
若是在用例集函数以外定义钩子函数,那么这个钩子函数将会对全部的mocha单元测试用例生效。
describe.only()/it.only() : 只执行此用例集或用例
describe.skip()/it.skip():跳过此用例集或用例的执行,跳过的用例会被标记为pending
的用例
this.skip();: 调用skip函数跳过此用例
this.retries();:从新执行用例(会从新运行用例函数的beforeEach和afterEach钩子函数)
this.slow(num);:标记耗费num时间认为执行耗时过长
this.timeout(500):定义用例、用例集、钩子函数超时时间,若是嵌套的用例集或者用例重写了timeout时间,则会覆盖上层的设置。经过this.timeout(0)
,能够关掉用例或用例集的超时判断。
mocha.setup('bdd'): 设置接口类型
mocha.run(); : 测试脚本加载完以后用mocha.run()
函数来运行测试
mocha init
: 生成一个浏览器中单元测试的架子
mocha --delay
: 在全局环境中生成一个run函数,延迟工做完成后调用run函数run()便可启动测试。
mocha命令的基本格式是:mocha [debug] [options] [files]
mocha的测试接口类型指的是集中测试用例组织模式的选择,包括BDD行为驱动开发(Behavior Driven Development),TDD测试驱动开发(Test-Driven Development),Exports,QUnit 和 Require-style 几种
BDD测试接口提供 describe(), context(), it(), specify(), before(), after(), beforeEach(), 和 afterEach()几种函数,其中context函数只是describe函数的别名,specify函数也是if函数的别名。
TDD接口提供 suite(), test(), suiteSetup(), suiteTeardown(), setup(), 和 teardown()函数
bash通配符(node通配符)【eg:$ mocha 'test/**/*.@(js|jsx)' 需加单引号】
通配符 意义
* 匹配0任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[[:class:]] 匹配任意一个属于指定字符类中的字符
字符类 意义
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper] 匹配任意一个大写字母
shouldjs是一个BDD测试断言库,它包装了assert,改变了书写风格,扩展了Object.prototype,额外提供了".should"语法。一旦引入了should,即“var should = require('should');”,那么当前js文件内的全部继承至Object的对象均可以.should:
目标对象.should.xxxx复制代码
若是目标对象没有继承至Object,那就换一种方式使用:
should(目标对象).xxx复制代码
或者
should.xxxxx(目标对象);复制代码
should库须要额外安装:$ npm install should --save-dev
浏览器端将should包下的should.js引入到前台页面,便可和后端同样使用。
should提供了一系列的静态方法,这些方法能够对非Object对象使用。它们和assert的基本方法实际上是同样的。具体api看上面连接。
每个should断言都返回一个被should.js包装过的对象,因此他能够造成链式语法,可是有一些断言,好比.length,.property 等将被断言的对象改变成了其属性值。
并且在“链”中,可使用下面等方便理解的词,这些词其实对should的断言一点实际影响都没有,注意,没有.or。
.an, .of, .a, .and, .be, .have, .w ith, .is, .which.
karma就是把咱们测试过程当中编写的测试用例,经过它调用浏览器来运行这些测试用例,而后再聚集测试结果,生成测试报告。能够选择各种测试框架(mocha、Jasmine 等)。
Travis-ci是一款持续集成(Continuous Integration)服务,它可以很好地与Github结合,每当代码更新时自动地触发集成过程。
配置.travis.yml文件,在travis官网上开启自动构建,则能够简单地开始某一项目的自动构建