码迷,mamicode.com
首页 > Web开发 > 详细

node.js 学习笔记1-mocha

时间:2017-12-15 00:49:56      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:web   logs   enc   await   res   命令行   用法   切换   vsc   

 

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

标签:web   logs   enc   await   res   命令行   用法   切换   vsc   

原文地址:http://www.cnblogs.com/liyuhan123456/p/8040555.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!