2016-08-31 3 views
0

У меня есть функция, которую я пытаюсь выполнить с помощью Mocha, которая использует moment.Тестирование модуля с помощью Mocha и Momentjs

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() { 
    // 
    }); 
}); 
+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'); 
    }); 
}); 
Смежные вопросы