美文网首页前端
mocha断言测试

mocha断言测试

作者: dittoyy3991 | 来源:发表于2017-08-07 16:31 被阅读237次
    1. npm install -g mocha
    2. npm install -g chai
    *Error: Cannot find module 'chai'*
    3,4是安装在项目内的
    3. npm install --save-dev chai
    4. npm install --save-dev mochawesome
    mocha --reporter mochawesome漂亮模板啦
    >测试结果报告就在[mochaawesome-reports
    ](https://github.com/ruanyf/mocha-demos/blob/master/demo02/mochawesome-reports)子目录生成
    
    [测试框架 Mocha 实例教程](http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html)
    [mochademo](https://github.com/ruanyf/mocha-demos)
    
    • 测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js(表示测试)或者.spec.js(表示规格)

    • describe块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("加法函数的测试"),第二个参数是一个实际执行的函数。

    • it块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称("1 加 1 应该等于 2"),第二个参数是一个实际执行的函数。

    • 所有的测试用例(it块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。
      var expect = require('chai').expect;
      expect断言的写法都是一样的。头部是expect方法,尾部是断言方法,比如equal、a/an、ok、match等。两者之间使用to或to.be连接。

    • mocha命令后面紧跟测试脚本的路径和文件名,可以指定多个测试脚本。
      一般mocha直接运行test文件夹里*.test.js文件,如还有目录下有该类文件需要运行则-- recursive遍历下

    执行的时候还可以单独指定目录以及shell通配符
    $ mocha spec/{my,awesome}.js
    $ mocha test/unit/.js
    $ mocha test/{,
    /}.{js,jsx}
    test目录下面任何子目录中、文件后缀名为js或jsx的测试脚本。注意,Node的通配符要放在单引号之中,否则星号()会先被Shell解释。
    $ mocha 'test/
    /.@(js|jsx)'#node通配符

    mocha --watch
    只要测试脚本有变化,就会自动运行Mocha
    
    mocha --bail
    只要有一个测试用例没有通过,就停止执行后面的测试用例。这对[持续集成](http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html)很有用
    
    - - -这里类似下面的only/skip用例管理啦???
    
    mocha --grep "1 加 1"  (-g)
    用于搜索测试用例的名称(即it块的第一个参数),然后只执行匹配的测试用例
    
    mocha --grep "1 加 1" --invert  (-i)
    只运行不符合条件的测试脚本,必须与--grep参数配合使用
    

    比较好玩的几点


    1. mocha.opts配置test目录下加上如下命令行参数
      --reporter tap
      --recursive
      --growl

    等价于mocha --recursive --reporter tap --growl

    如果测试用例不是存放在test子目录,可以在mocha.opts写入以下内容
    运行server-tests目录及其子目录之中的测试脚本
    server-tests
    --recursive

    1. 执行demo5关于require的时候提示
      报错severagent

    npm install superagent cheerio --save

    1. describe块之中,提供测试用例的四个钩子:before()、after()、beforeEach()和afterEach()。它们会在指定时间执行。

    2. mocha -t 10000 async.test.js
      get请求

    var request = require('superagent');
    var expect = require('chai').expect;
    
    describe('async.test.js - 异步测试', function() {
      it('异步请求应该返回一个对象', function(done){
        request
          .get('https://api.github.com')
          .end(function(err, res){
            expect(res).to.be.an('object');
            done();
          });
      });
    });
    

    Mocha内置对Promise的支持,允许直接返回Promise,等到它的状态改变,再执行断言,而不用显式调用done方法
    promise.test.js

    var fetch = require('node-fetch');
    var expect = require('chai').expect;
    
    describe('promise.test.js - 异步测试', function() {
      it('异步请求应该返回一个对象', function() {
        return fetch('https://api.github.com')
          .then(function(res) {
            return res.json();
          }).then(function(json) {
            expect(json).to.be.an('object');
          });
      });
    });
    
    1. describe块之中,提供测试用例的四个钩子:before()、after()、beforeEach()和afterEach()。它们会在指定时间执行.

    技能点燃,类似unittest里的setUp/tearDown,类似pytest里的setUp/tearDown和setUpClass/tearDownClass
    --demo6里的栗子

    1. *测试用例管理only+skip
      describe块和it块都允许调用only方法,表示只运行某个测试套件或测试用例只运行特定的几个
      skip是跳过不运行,好吧都是通用的命令哇

    2. *浏览器测试

    • mocha init demo08
    • add.js
    • chai.js
    • index.html里加上它3js
    <script>
      mocha.setup('bdd');
    </script>
    <script src="add.js"></script>
    <script src="http://chaijs.com/chai.js"></script>
    <script src="tests.js"></script>
    <script>
      mocha.run();
    </script>
    
    • tests.js
    1. 生成规格文件demo09
    • markdown格式: mocha --recursive -R markdown > spec.md
    • html格式: mocha --recursive -R doc > spec.html

    相关文章

      网友评论

        本文标题:mocha断言测试

        本文链接:https://www.haomeiwen.com/subject/jgiolxtx.html