2016-08-31 4 views
0

Ich habe eine Funktion, die ich versuche Unit-Test mit Mocha, die moment verwendet.Komponententest mit Mocha und Momentjs

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

Hier ist, was ich bisher habe, aber ich habe Probleme, herauszufinden, was mit moment zu tun. Wenn ich makeRange(40) aufrufen und die Tests ausführen, ist die Zeichenfolge jedes Mal anders.

Wie kann ich gefälschte die aktuelle Zeit (dh 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

Sie müssen nur die aktuelle Uhrzeit in einem bestimmten Format abrufen? –

Antwort

0

Sie rewire verwenden, so dass Sie das moment Modul spotten können, die in der Steuerung erforderlich ist, um sicherzustellen, dass ein bekanntes Datum/Uhrzeit wird verwendet?:

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'); 
    }); 
});