美文网首页
sinonjs与测试时间

sinonjs与测试时间

作者: 进击的前端 | 来源:发表于2016-08-22 11:44 被阅读73次

关于前端测试Mocha和chai.js简单地进行了测试的入门,然后发现作者用了一下sinonjs来辅助测试,这里主要针对模拟时间

Standalone test spies, stubs and mocks for JavaScript.No dependencies, works with any unit testing framework.

独立测试javascript的spies,stubs,mocks,不依赖于任何单元测试的框架。

下面的这个例子是实现一个定时器,输入开始时间和结束时间,然后时钟就会自动定时输出数字,每隔十分之一秒要跳动数字

对于这个功能,主要有两个测试,一个是输出,一个是定时的功能,此外能够正常结束也是有必要的。

首先要重写时钟和console.log,在开始和结尾

 beforeEach(function () {
    nums = [];

    if (typeof console === 'undefined') {
      console = {
        log: null
      };
    }
    origConsoleLog = console.log;
    console.log = function (val) {
      nums.push(val);
    };
    //重写 console.log

    this.clock = sinon.useFakeTimers();
   //加载假时钟
  });

  afterEach(function () {
    console.log = origConsoleLog;
   //还原console.log
    this.clock.restore();
      //还原时钟
  });

第一个测试用例测试功能

我们选择用Num数组来存储console.log的输入,同时测试根据时间输出的准确性,同时测试输出内容的准确性

  it('should count from start number to end number, one per 1/10th of a second', function () {
    this.timeout(600);
 
    countAnswers.count(1, 5);

    for (var i = 1; i <= 5; i++) {
      expect(nums.length).to.eql(i);

      this.clock.tick(100);
    }

    expect(nums.length).to.eql(5);
    expect(nums[0]).to.eql(1);
    expect(nums[4]).to.eql(5);
  });

第二个测试 cancel

  it('should provide a method to cancel the counting', function () {
    this.timeout(600);

    var counter = countAnswers.count(1, 5);
    counter.cancel();

    this.clock.tick(550);

    expect(nums.length < 5).to.be.ok;
  });

我实现的代码

count: function (start, end) {
   var num = start;
   console.log(num);
   var timer = setInterval(function () {
     num = num+1;
     console.log(num);
     if(num===end){
       clearInterval(timer);
     }
   },100);
   return {
     cancel:function () {
       timer && clearInterval(timer);
     }
   };
 }

作者给出来的代码,我用的是setInterval,作者用的是setTimeout

count: function (start, end) {
  var timeout;
  function doIt () {
    console.log(start++); // eslint-disable-line no-console

    if (start <= end) {
      timeout = setTimeout(doIt, 100);
    }
  }

  doIt();

  return {
    cancel: function () {
      timeout && clearTimeout(timeout);
    }
  };
}

相关文章

  • sinonjs与测试时间

    关于前端测试Mocha和chai.js简单地进行了测试的入门,然后发现作者用了一下sinonjs来辅助测试,这里主...

  • Fakes - Sinon.JS

    对https://sinonjs.org/releases/v6.3.4/fakes/的翻译 简介 fake 是从...

  • 第一次热情测试

    时间:5.14号 成员:热情测试导师嘻嘻、热情测试者柠檬 时间:两小时 收获:清晰了五大热情清单 “我与热情测试的...

  • 【测试文章发布时间与显示时间/结果】

    测试文。3月4号13点25新建,同时发布。预计3月5号14点投稿。看显示时间。 5号14点左右投稿,显示如下图。 ...

  • MySQL优化案例篇1-mysqldump与load data比

    一.环境准备 一直想测试下mysqldump与load data的性能比较,今天抽出部分时间,在测试环境进行测试。...

  • 时间测试

    时间测试 使用方法是在作用域中使用宏TIME_INTERVAL_SCOPE(d),d为打印用的字符串,输出作用域的...

  • 测试时间

    今天,把自己做事的时间计算了一下。 做面条饭要30分钟,洗碗刷锅要10分钟,大便5分钟,洗脸2分钟,刷牙1分钟。 ...

  • 09-软件测试方法

    一、测试活动的生命周期 测试计划(测试准入) -> 需求分析与设计 -> 测试实现与执行 -> 测试报告(测试准出...

  • 09-软件测试方法

    一、测试活动的生命周期 测试计划(测试准入) -> 需求分析与设计 -> 测试实现与执行 -> 测试报告(测试准出...

  • 软件测试(三)--测试团队管理

    3.1重视测试团队的管理与建设 1,重要性和必要性:测试团队面临的挑战 测试人员被认为低人一等 测试时间永远不够 ...

网友评论

      本文标题:sinonjs与测试时间

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