使用Mocha和Momentjs进行单元测试

时间:2016-08-31 20:28:33

标签: javascript unit-testing mocha

我有一个功能,我尝试使用function makeRange(timeagoMinutes) { var endDate = moment().toISOString(); var startDate = moment().subtract(timeagoMinutes, 'm').toISOString(); return startDate + ',' + endDate; } 的Mocha进行单元测试。

moment

这是我到目前为止所做的,但我无法弄清楚如何处理makeRange(40)。如果我调用moment().toISOString()并运行测试,则每次字符串都不同。

如何伪造当前时间(即var rewire = require('rewire'); var controller = rewire('../thecontroller.js'); var moment = require('moment'); describe.only('makeRange', function() { var makeRange; beforeEach(function() { makeRange = controller.__get__('makeRange'); }); it('should return a string with a start date and end date', function() { // }); });

$(function () {
  $("#total").bind("keyup change", function(e) {
    console.log('event: ' + e.type);
  });
  $("#total").trigger('keyup').trigger('change');
});

1 个答案:

答案 0 :(得分:0)

您正在使用rewire,因此您可以模拟控制器中所需的moment模块,以确保使用已知的日期/时间:

describe.only('makeRange', function () {

  var makeRange;

  beforeEach(function () {

    var momentMock = function () {
      return moment('2016-08-31T09:00:00Z');
    };
    controller.__set__("moment", momentMock);
    makeRange = controller.__get__("makeRange");
  });

  it('should return a string with a start date and end date', function () {

    expect(makeRange(40)).to.equal('2016-08-31T08:20:00.000Z,2016-08-31T09:00:00.000Z');
  });
});
相关问题