使用Mocha和Momentjs进行单元测试

Unit testing with Mocha and Momentjs

本文关键字:单元测试 Momentjs Mocha 使用      更新时间:2023-09-26

我有一个函数,我正在尝试使用moment的Mocha进行单元测试。

function makeRange(timeagoMinutes) {
  var endDate = moment().toISOString();
  var startDate = moment().subtract(timeagoMinutes, 'm').toISOString();
  return startDate + ',' + endDate;
}

这是我到目前为止所拥有的,但我很难弄清楚如何处理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() {
    //
  });
});

您正在使用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');
  });
});