我正在使用moment.js在我的React組件的幫助文件中完成大部分日期邏輯,但是我一直無法弄清楚如何在Jest a la sinon.useFakeTimers()中模擬日期。如何在Jest中設置模擬日期?
Jest文檔只講述定時器函數,如setTimeout,setInveral等,但沒有幫助設置日期,然後檢查我的日期函數做他們打算做的事情。
下面是我的一些JS文件:
var moment = require('moment');
var DateHelper = {
DATE_FORMAT: 'MMMM D',
API_DATE_FORMAT: 'YYYY-MM-DD',
formatDate: function(date) {
return date.format(this.DATE_FORMAT);
},
isDateToday: function(date) {
return this.formatDate(date) === this.formatDate(moment());
}
};
module.exports = DateHelper;
這裏是我已經設置了用玩笑:
jest.dontMock('../../../dashboard/calendar/date-helper')
.dontMock('moment');
describe('DateHelper', function() {
var DateHelper = require('../../../dashboard/calendar/date-helper'),
moment = require('moment'),
DATE_FORMAT = 'MMMM D';
describe('formatDate', function() {
it('should return the date formatted as DATE_FORMAT', function() {
var unformattedDate = moment('2014-05-12T00:00:00.000Z'),
formattedDate = DateHelper.formatDate(unformattedDate);
expect(formattedDate).toEqual('May 12');
});
});
describe('isDateToday', function() {
it('should return true if the passed in date is today', function() {
var today = moment();
expect(DateHelper.isDateToday(today)).toEqual(true);
});
});
});
現在,這些測試都通過了,因爲我用一下,我的函數使用時刻,但它似乎有點不穩定,我想將日期設置爲測試的固定時間。
關於如何完成這個任何想法?
這裏的設置將被返回的實際日期的一點點漂亮方法:'Date.now = jest.fn (()=> new Date(Date.UTC(2017,0,1))。valueOf());' – developering