[Js_Testing]Mocha+Chai单元测试进阶

目录

  • 选择测试用例
    • 指定测试脚本
    • 指定目录底下所有测试脚本
    • 通配符指定多个测试脚本
    • 过滤
      • 只测试其中某一组测试
      • 跳过某一组测试
    • 配置文件指定测试脚本
  • 钩子
  • 异步测试
  • HTTP
  • 浏览器看测试结果&&ES6
  • 本节代码
  • 参考链接

选择测试用例

指定测试脚本

第一行执行test1.js test2.js test3.js三个脚本
第二行执行test底下test1,test2 两个脚本

mocha test1.js test2.js test3.js
mocha test/{test1,test2}.js

指定目录底下所有测试脚本

默认mocha测试test下面第一层文件,加上recursive,test底下所有都会被测到

mocha --recursive

通配符指定多个测试脚本

mocha test/demo3/*.js

过滤

只测试其中某一组测试

  • grep
    测试 it 第一个参数为a的case
    mocha --grep "a"
    
  • only
    只测a 这组case
    describe('test', function(){
      describe.only('a', function(){
      })
    it.only('a', function() {
      expect(result).to.be.equal(2);
    });
    
     })
    

跳过某一组测试

  • invert
    测不带a的测试脚本
    mocha --grep "a" --invert
    
  • skip
    测排除a这组的case
    describe('test', function(){
      describe.skip('a', function(){
      })
      it.skip('a', function() {
      expect(result).to.be.equal(1);
    });
     })
    

配置文件指定测试脚本

  1. 创建test 目录下 创建 mocha.opts 脚本

  2. mocha.opts

    --reporter //默认spec 
    testapp //指定目录testapp,如果默认test,这一行不用写
    --recursive
    --watch
    

    第一行指定测试报告的格式,默认spec格式,可以改写为 --reporter spec
    或者–reporter mochawesome
    第二行+第三行,执行某个目录底下所有文件
    第四行mocha --watch,只要测试脚本发生变化,就会自动触发执行测试

  3. 执行mocha 即可


钩子

官网的例子
before()钩子只运行(一次),然后beforeEach()钩子,afterEach()钩子,每次it前后都会运行一次,最后after()钩子只运行(一次)

describe("mocha钩子函数",function(){
    before(function(){
      //本块代码会在所有测试用例执行之前执行
     });

    after(function(){
          //本块代码会在所有测试用例执行之后执行
     });

    beforeEach(function(){
          //本块代码会在每个测试用例执行之前执行
     });

    afterEach(function(){
          //本块代码会在每个测试用例执行之后执行
     });
})

异步测试

查看2.test.js

setTimeout函数接受两个参数,第一个参数func|code是将要推迟执行的函数名或者一段代码,第二个参数delay是推迟执行的毫秒数。

describe("ascy failed", function () {
    var a= false;
    beforeEach(function () {
        setTimeout(function () {
            a= true;

        }, 50);
    });
    it("should pass", function () {
        expect(a).to.be.equal(true);
    });
});

[Js_Testing]Mocha+Chai单元测试进阶_第1张图片
在setTimeout里面回调被调用之前,expect运行了,所以fail掉了。现在加上done().

describe("ascy ok", function () {
    var a= false;
    beforeEach(function (done) {
        setTimeout(function () {
            a= true;
            done();
        }, 50);
    });
    it("should pass", function () {
        expect(a).to.be.equal(true);
    });
});

done告诉了mocha,你在编写异步测试,mocha进入一个计时器,等待异步函数来完成

当测试内容需要长时间加载时,很容易timeout,用-t或–timeout参数,改变默认的超时设置

 mocha -t 5000 1.test.js

HTTP

查看3.test.js
使用API: https://randomuser.me/api/?results=10
创建测试3.test.js文件,执行需要加时间mocha 3.test.js -t 30000

Mocha内置对Promise的支持,允许直接返回Promise,等到它的状态改变,再执行断言

var expect = require('chai').expect;
const fetch = require("node-fetch");


describe("HTTP ok", function () {
    it('HTTP', function () {
        return fetch('https://randomuser.me/api/?results=10/3')
            .then(function (res) {
                return res.json();
            }).then(function (json) {
                expect(json).to.be.an('object');
            });
    });
});

浏览器看测试结果&&ES6

这部分功能没用过,想学习的点这

本节代码

实战:Puppeteer+Mocha+Chai实现端到端测试

参考链接

https://harttle.land/2016/07/12/async-test-with-chai-as-promised.html
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
https://www.jianshu.com/p/c95d48a00f97

你可能感兴趣的:(Full,Stack,Developer,Testing)