使用mocha进行单元测试

感兴趣,于是= =入门记录23333

安装

//安装mocha测试框架
npm install -g --dev-save mocha
//安装chai断言库
npm install -g --dev-save chai
//安装导出的模版
npm install --dev-save mochawesome

运行

运行这边我在执行的时候遇到个问题是在webstorm中直接执行会报错 describe is not defined ,在git bash或者cmd下都没问题。
执行的几种命令:

//在目录下执行测试文件

$ mocha a.test.js
//mocha会默认执行目录下的test子文件夹内的js
$ mocha
//上一条执行的是一层的,要遍历文件夹下所有层次的测试文件,则:
$ mocha --recursive
//执行指定文件夹demo下的test1.js test2.js
$ mocha demo/{test1,test2}.js
//执行指定文件下所有文件
$ mocha demo/ *.js
//执行导出模版(相对路径 按照自己情况来) 得到的导出文件夹在当前目录下
$ ../node_modules/.bin/mocha --reporter mochawesome

demo(同步)

describe 是测试套件,it是测试用例,第一个参数都是名称,第二个参数是实际执行的函数。

//add.js

function add(x,y){
 return x+y
}
module.exports = add;
​
//add.spec.js
var add = require("./add.js");
var expect = require("chai").expect;
describe('test demo',function(){
 it('1+1=2',function(){
   expect(add(1,1)).to.be.equal(2);
 })
})

demo(异步)

var expect = require("chai").expect;

var request = require("superagent");
decribe('anscy demo',function(){
 it('get info',function(done){
   request
    .get('xxx/api/xxx')
    .end(function(err,res){
         expect(res).to.be.an('object');
      done();
    })
 })
})

引入了superagent库来进行http操作,done() 代表该测试用例的结束
(superagent的使用详情看官方文档,http://visionmedia.github.io/superagent/)

模拟登录

在实际项目测试中,几乎所有api都是基于登录状态的,所以在执行前要先带上登录的session。
思路:在执行登录请求的时候,在header中有set-cookie的字段,得到cookie的值,在每次请求api的时候在header中带上这个cookie

var expect = require('chai').expect;

var request = require('superagent');
var webservice = require('./settings.js');
describe('mock login',function () {
   var cookieserver;
   beforeEach(function (done) {
       request
           .post(webservice+'/api/investManage/login')
           .send('{"email":"123","pwd":"123"}')
           .set('Content-Type','application/json')
           .end(function (err, res) {
               if(!err){
                   cookieserver = res.header['set-cookie'];
                   done()
               }
           })
   });
   it('investInfo',function (done) {
       request
           .get(webservice+'/api/investManage/invest_manage/profile')
           .set('Cookie',cookieserver)
           .end(function (err,res) {
               done()
           })
   });
})

不是promise写法的异步请求,一定要带上done(),每次都忘坑了自己一把= =

你可能感兴趣的:(使用mocha进行单元测试)