1.mocha是什么
mocha是一款流行的额JavaScript测试框架。
2.mocha的基本用法
1.使用npm 安装mocha包,我并没有选择全局安装。只是在mocha的文件夹里的Package.json添加mocha的依赖。
如下图
{ ?"name": "mocha-test", ?"version": "0.0.1", ?"dependencies": { ???"koa": "2.4.1", ???"supertest": "3.0.0", ???"mocha": "3.0.2" ?}, ?"scripts": { ???"test": "mocha" ?}, ?"exclude": [ ???"node_modules" ?], ?"keywords": [ ???"test", ???"mocha" ?]}
2.mocha的测试写法
const assert = require(‘assert‘);const sum = require(‘../hello‘);describe(‘测试HELLO.JS‘,() =>{ ???describe(‘测试SUM函数‘,() =>{ ???????before(function () { ???????????console.log(‘before:‘); ???????}); ???????after(function () { ???????????console.log(‘after.‘); ???????}); ???????beforeEach(function () { ???????????console.log(‘ ?beforeEach:‘); ???????}); ???????afterEach(function () { ???????????console.log(‘ ?afterEach.‘); ???????}); ???????it(‘sum() should return 0‘,() =>{ ???????????assert.strictEqual(sum(),0); ???????}) ???????it(‘sum(1) should return 1‘,() =>{ ???????????assert.strictEqual(sum(1),1); ???????}) ???????it(‘sum(1,2) should return 3‘,() =>{ ???????????assert.strictEqual(sum(1,2),3); ???????}) ???????it(‘sum(1,2,3) should return 6‘,() =>{ ???????????assert.strictEqual(sum(1,2,3),6); ???????}) ???})})
首先 mocha必须要有断言模块。图中的assert是node.js自带的。简单来说断言对传入数据做一些比较操作的类。
describe函数的两个参数分别是测试的描述以及测试的代码区域。describe可以嵌套describe函数。可以在层次结构上更好的描述测试逻辑。
it函数式才是真正运行测试的函数。第一个参数仍然是测试的描述,第二个参数是一个函数。里面放的就是要测试的内容。
这些都是廖雪峰老师教程里的例子。具体的源码和教程可以去看。在此只是做一个学习笔记。对自己的总结。
3.mocha如何启动测试
在廖雪峰老师的教程中有三种方法。我在实际尝试时。第一种方法没有用处。
我用的第一种方法是向package.json文件里添加“script”:{"test": "mocha"}。然后命令行切换到测试文件的目录下输入npm test即可。
如图
第二种方法是在webstorm上添加mocha依赖。(只是因为我用的webstorm,廖雪峰老师用的vscode)
直接放图吧
可以直接在IDE中一键测试。十分方便
3.引发出的一些问题与解答
在廖雪峰老师的教程中会有这样的代码
?let expression = await fs.readFile(‘./data.txt‘, ‘utf-8‘);
实际上如果你这么写的话 编辑器会直接报错。要求你必须加入回调函数。并且这么写await是不能起到应有的作用的。
因为fs.readFile是一个异步函数。没有返回的值。
await 后面必须是一个promise对象。
所以我们必须改写这个函数
let readFile = (path,format) =>{ ??return new Promise(resolve,reject) =>{ ??????fs.readFile(path,format,(err,data) =>{ ??????????if(err) reject (err); ??????????resolve(data); ???????}) ?????}} ???
放上完整代码
var readFile = function (fileName,format) { ???return new Promise((resolve, reject) =>{ ???????fs.readFile(fileName,format,(err,data) =>{ ???????????if(err) reject (err); ???????????resolve(data); ???????}) ???})};const fs = require(‘fs‘);module.exports = async () =>{ ???let expression = await readFile(__dirname+‘/data.txt‘,‘utf-8‘); ???let fn = new Function(‘return ‘+ expression); ???let r = fn(); ???console.log(`Calculate: ${expression} = ${r}`); ???return r;}
另外还有一个问题就是。在fs.readFile的第一个参数path中使用相对路径会出现读取不到的错误。是因为此参数里默认的当前路径有误。最好使用绝对路径。或者__dirname+’...‘的形式。
4.最后
由于异步测试和HTTP测试在教程中讲的较为简短。
所以并没有太多值得写出来的东西。
因为刚接触这些新东西。新框架。
很多API都不了解。也不会用。不懂得框架的设计思想。
所以只能等以后使用这些框架做一些具体的实例时。才有更多的发现以及感悟。
今天就先到这把。
node.js 学习笔记1-mocha
原文地址:http://www.cnblogs.com/liyuhan123456/p/8040555.html