单元测试学习总结
Mocha 的安装和使用
1. 安装
- 使用npm全局安装:
npm install -g mocha
安装Mocha >= v3.0.0,npm的版本应该>=v1.4.0。除此,确保使用Node.js的版本>=v0.10来运行Mocha
2.简单的例子
先fork代码到自己仓库,然后clone下来。安装依赖:
git clone url npm i npm test(package.json中的script) // 执行mocha
使用nodejs的断言assert, 下面是一个最基本的例子:
···
var assert = require('assert') describe('Array', function() { describe('#indexOf()', function() { it('should return -1 when the value is not present', function() { assert.equal(-1, [1, 2, 3].indexOf(5)/* 填空题 */) }) }) })
···
-了解 Node assert 的用法 文档http://nodejs.cn/api/assert.html
assert.deepStrictEqual(actual, expected[, message]) // 判断深度 {a:{a:1}} == {b:{c:1}}} assert.strictEqual(actual, expected[, message]) // 判断相等 === assert.notStrictEqual(actual, expected[, message]) //判断不等 === assert.ok(value[, message]) // 是否为真 assert.throws(()=>{ throw new Error(error) },Error,'不符合预期的错误') // 抛出错误
以上是几个常用的assert 断言。
异步的代码如何使用断言呢?
describe('jquery', function() { describe('异步断言测试', function() { it('异步需要执行回调done()', function() { $.ajax({ url:"a.html", success:function(){ done(); } }) }) }) })
使用mocha测试异步代码是再简单不过了。只需要在测试完成的时候调用一下回调函数即可。通过添加一个回调函数(通常命名为done)给it()方法,Mocha就会知道,它应该等这个函数被调用的时候才能完成测试。
此外Mocha提供了一些钩子函数:before(),after(),beforeEach()和afterEach()。这些钩子函数可以用于设置测试的先决条件或者对测试进行清理。
describe('hooks', function() { before(function() { // 在这个区块内的所有测试之前运行 }) after(function () { // 在这个区块内的所有测试之后运行 }) beforeEach(function () { // 在这个区块内的每个测试运行之前运行 }) afterEach(function () { // 在这个区块内的每个测试之后运行 }) })
测试可以出现在before,after或者和你的钩子函数交替出现。钩子函数会按照它们被定义的顺序运行。一般就是,before()(只运行一次)->beforeEach()->afterEach()->after()(只运行一次)。
mocha的命令的基本选项:
Options: -h, --help 输出帮助信息 -V, --version 输出mocha的版本号 -A, --async-only 强制所有的测试用例必须使用callback或者返回一个promise的格式来确定异步的正确性 -c, --colors 在报告中显示颜色 -C, --no-colors 在报告中禁止显示颜色 -g, --growl 在桌面上显示测试报告的结果 -O, --reporter-options <k=v,k2=v2,...> 设置报告的基本选项 -R, --reporter <name> 指定测试报告的格式 -S, --sort 对测试文件进行排序 -b, --bail 在第一个测试没有通过的时候就停止执行后面所有的测试 -d, --debug 启用node的debugger功能 -g, --grep <pattern> 用于搜索测试用例的名称,然后只执行匹配的测试用例 -f, --fgrep <string> 只执行测试用例的名称中含有string的测试用例 -gc, --expose-gc 展示垃圾回收的log内容 -i, --invert 只运行不符合条件的测试用例,必须和--grep或--fgrep之一同时运行 -r, --require <name> require指定模块 -s, --slow <ms> 指定slow的时间,单位是ms,默认是75ms -t, --timeout <ms> 指定超时时间,单位是ms,默认是200ms -u, --ui <name> 指定user-interface (bdd|tdd|exports)中的一种 -w, --watch 用来监视指定的测试脚本。只要测试脚本有变化,就会自动运行Mocha --check-leaks 检测全局变量造成的内存泄漏问题 --full-trace 展示完整的错误栈信息 --compilers <ext>:<module>,... 使用给定的模块来编译文件 --debug-brk 启用nodejs的debug模式 --es_staging 启用全部staged特性 --harmony<_classes,_generators,...> all node --harmony* flags are available --preserve-symlinks 告知模块加载器在解析和缓存模块的时候,保留模块本身的软链接信息 --icu-data-dir include ICU data --inline-diffs 用内联的方式展示actual/expected之间的不同 --inspect 激活chrome浏览器的控制台 --interfaces 展示所有可用的接口 --no-deprecation 不展示warning信息 --no-exit require a clean shutdown of the event loop: mocha will not call process.exit --no-timeouts 禁用超时功能 --opts <path> 定义option文件路径 --perf-basic-prof 启用linux的分析功能 --prof 打印出统计分析信息 --recursive 包含子目录中的测试用例 --reporters 展示所有可以使用的测试报告的名称 --retries <times> 设置对于失败的测试用例的尝试的次数 --throw-deprecation 无论任何时候使用过时的函数都抛出一个异常 --trace 追踪函数的调用过程 --trace-deprecation 展示追踪错误栈 --use_strict 强制使用严格模式 --watch-extensions <ext>,... --watch监控的扩展 --delay 异步测试用例的延迟时间
should.js的使用
在test目录添加mocha.opts文件:
--require should // mocha在执行的时候回引入shouldjs
sholdjs的常用的几个:
a.should.equal(b) //判断相等 (5).should.be.exactly(5).and.be.a.Number() // should.throws(block, [error], [message]) // 捕获错误
具体更多断言参考 http://shouldjs.github.io/
接入travis Ci
打开 : <https://www.travis-ci.org/> 登录GitHub账号 授权
在项目根目录添加.travis.yml文件
language: node_js //执行的语言 node_js: - "8.9.4" // 版本 before_script: // 钩子 有before 肯定就有after - npm install -g mocha
这样当你提交代码之后 travis就会自动运行测试 发送报告到你的邮箱
karma 的基本使用
参考 《https://www.jianshu.com/p/66d...》
个人理解就是把我们测试过程中编写的测试用例,通过它调用浏览器来运行这些测试用例,然后再汇集测试结果,生成测试报告!
需要注意的就是 travis 的虚拟机没有chrome ,所以需要进行配置
language: node_js node_js: - "8.9.4" before_script: - npm install -g karma-cli - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start"