测试框架Mocha与断言expect
在浏览器和Node环境都可以使用
除了Mocha以外,类似的测试框架还有Jasmine、Karma、Tape等,也很值得学习。
整个项目源代码:
为什么学习测试代码?
1. react的开发不适合网页端的调试和测试
2. 把关所写代码质量,防止bug和漏洞
要测试的文件add.js
测试文件命名为:add.test.js或者add.spec.js
测试脚本可以独立运行。
测试脚本里包含一个或多个describe块,每个describe块应该包括一个或多个it块
add.test.js:
var add = require('./add.js'); var expect = require('chai').expect; // 引入断言库,引入的断言库是chai,并且指定使用它的expect风格 describe('加法的测试', function () { it('1 + 1应该等于2', function () { expect(add(1, 1).to.be.equal(2)); // 断言 }); });
断言: 判断源码的执行结果与预期是否一致,如果不一致就抛出一个错误
所有的测试用例(it块)都应该含有一句或多句的断言。
// 执行测试脚本
mocha add.test.js
expect断言例子:
// 相等或不相等 expect(4 + 5).to.be.equal(9); expect(4 + 5).to.be.not.equal(10); expect(foo).to.be.deep.equal({ bar: 'baz' }); // 布尔值为true expect('everthing').to.be.ok; expect(false).to.not.be.ok; // typeof expect('test').to.be.a('string'); expect({ foo: 'bar' }).to.be.an('object'); expect(foo).to.be.an.instanceof(Foo); // include expect([1,2,3]).to.include(2); expect('foobar').to.contain('foo'); expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo'); // empty expect([]).to.be.empty; expect('').to.be.empty; expect({}).to.be.empty; // match expect('foobar').to.match(/^foo/);
// mocha测试多个脚本
mocha file1.test.js file2.test.js file3.test.js
Mocha默认运行test子目录里面的测试脚本。
所以,一般都会把测试脚本放在test目录里面,然后执行mocha测试代码
// 执行默认test里的测试脚本
mocha
mocha --watch
测试项目地址:
https://github.com/liuqiuchen/myMocha
测试项目下载之后,在cmd里执行cnpm install,然后先执行cnpm run babel,再执行mocha
测试结果在浏览器端显示:
// 在指定目录testBrowser生成html文件
mocha init testBrowser
对生成的html做适当的修改:
<!DOCTYPE html> <html> <head> <title>Mocha</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="mocha.css" /> </head> <body> <div id="mocha"></div> <script src="mocha.js"></script> <script>mocha.setup('bdd');</script> <!-- 引入要测试的文件 --> <script src="add.js"></script> <!-- 引入断言 http://chaijs.com/chai.js--> <script src="chai.js"></script> <!-- 在tests.js里写测试代码 --> <script src="tests.js"></script> <script> mocha.run(); </script> </body> </html>
添加代码到add.js、tests.js。详细参见:https://github.com/liuqiuchen/myMocha
// 生成规格文件
mocha --recursive -R markdown > spec.md
// 生成html格式的规格文件
mocha --recursive -R doc > spec.html