• mocha学习(三)hook 机制 和 测试技巧


    hook 机制

    hook 就是在测试流程的不同时段触发,比如在整个测试流程之前,或在每个独立测试之前等。

    hook也可以理解为是一些逻辑,通常表现为一个函数或者一些声明,当特定的事件触发时 hook 才执行。

    提供方法有:before()、beforeEach() after() 和 afterEach()。

    方法解析:

    • before():所有测试用例的统一前置动作
    • after():所有测试用例的统一后置动作
    • beforeEach():每个测试用例的前置动作
    • afterEach():每个测试用例的后置动作

    用法:

    describe('hooks', function() {
      before(function() {
        //在执行本区块的所有测试之前执行
      });
    
      after(function() {
        //在执行本区块的所有测试之后执行
      });
    
      beforeEach(function() {
        //在执行本区块的每个测试之前都执行
      });
    
      afterEach(function() {
        //在执行本区块的每个测试之后都执行
      });
    
      //测试用例
    
    });

    描述 hook

    所有的 hook 都可以加上描述,这样可以更好地定位到测试用例中的错误。如果 hook 函数指定了名称,会在没有描述时使用函数名,例如:

    beforeEach(function() {
      //beforeEach hook
    });
    
    beforeEach(function needFun() {
      //beforeEach: namedFun
    });
    
    beforeEach('some description', function() {
      //beforeEach:some description
    });

    补充:上述示例中 注释的内容就是对 hook 的描述。

    测试占位

    测试用例占位只要添加一个没有回调的 it() 方法即可:

    var assert = require('assert');
    
    describe('Array', function() {
    
      describe('#indexOf()', function() {
        //同步测试
        it('当值不存在时应该返回 -1', function() {
          assert.equal(-1, [1,2,3].indexOf(5));
          assert.equal(-1, [1,2,3].indexOf(0));
        });
      });
    
      describe('Array', function() {
        describe('#indexOf()', function() {
          //下面是一个挂起的测试
          it('当值不存在时应该返回 -1');
        });
      });
    });
    1. 在tests文件夹中创建一个pending.js文件
    2. 再把上述中的示例写入到我们新创建的pending.js文件当中,然后点击保存文件。(不建议拷贝)
    3. 最后在右边linux环境中输入命令 mocha pending.js, 运行我们的示例。(要进入到tests文件夹中在运行命令)

    仅执行指定测试

    仅执行指定测试的特性可以让你通过添加 .only() 来指定唯一要执行的测试套件或测试用例:

    describe('Array', function(){
      describe.only('#indexOf()', function(){
        ...
      })
    })

    或一个指定的测试用例:

    describe('Array', function(){
      describe('#indexOf()', function(){
        it.only('当值不存在时应该返回 -1', function(){
    
        })
    
        it('当值不存在时应该返回 -1', function(){
    
        })
      })
    })

    PS:注意只能出现一个 .only()

    忽略指定测试

    该特性和 .only() 非常相似,通过添加 .skip() 你可以告诉 Mocha 忽略的测试套件或者测试用例(可以有多个)。该操作使得这些操作处于挂起的状态,这比使用注释来的要好,因为你可能会忘记把注释给取消掉。

    describe('Array', function(){
      describe.skip('#indexOf()', function(){
        ...
      })
    })

    或一个指定的测试用例:

    describe('Array', function(){
      describe('#indexOf()', function(){
        it.skip('当值不存在时应该返回 -1', function(){
    
        })
    
        it('当值不存在时应该返回 -1', function(){
    
        })
      })
    })

    动态生成测试

    由于mocha 可以使用 function.prototype.call 和function 表达式定义测试套件和测试用例,所以可以动态生成测试用例。

    var assert = require('assert');
    
    function add() {
      return Array.prototype.slice.call(arguments).reduce(function(prev, curr) {
        return prev + curr;
      }, 0);
    }
    
    describe('add()', function() {
      var tests = [
        {args: [1, 2],       expected: 3},
        {args: [1, 2, 3],    expected: 6},
        {args: [1, 2, 3, 4], expected: 10}
      ];
    
      tests.forEach(function(test) {
        it('correctly adds ' + test.args.length + ' args', function() {
          var res = add.apply(null, test.args);
          assert.equal(res, test.expected);
        });
      });
    });
    1. 在tests文件夹中创建一个dynamically.js文件
    2. 再把上述中的示例写入到我们新创建的dynamically.js文件当中,然后点击保存文件。(不建议拷贝)
    3. 最后在右边linux环境中输入命令 mocha dynamically.js, 运行我们的示例。(要进入到tests文件夹中在运行命令)
    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    POJ1064 浮点数二分答案
    2019牛客暑期多校训练营(第二场)H.Second Large Rectangle
    最大全1子矩阵的两种解法(例题:City Game HDU
    POJ
    Codeforces Round #588 (Div. 2) C
    1216E
    1221D
    BUY LOW, BUY LOWER, POJ
    Priest John's Busiest Day (2-sat)
    poj1080
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/15067822.html
Copyright © 2020-2023  润新知