Tôi đang sử dụng moment.js để thực hiện hầu hết logic ngày tháng của mình trong tệp trợ giúp cho các thành phần React của mình nhưng tôi không thể tìm ra cách giả lập ngày trong Jest a la sinon.useFakeTimers()
.
Các tài liệu của Jest chỉ nói về các chức năng hẹn giờ như setTimeout
, setInterval
v.v. nhưng không giúp đặt ngày và sau đó kiểm tra xem các chức năng ngày của tôi có làm đúng những gì chúng cần làm hay không.
Đây là một số tệp JS của tôi:
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;
và đây là những gì tôi đã thiết lập bằng Jest:
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);
});
});
});
Bây giờ các bài kiểm tra này vượt qua vì tôi đang sử dụng thời điểm và các chức năng của tôi sử dụng thời điểm nhưng nó có vẻ hơi không ổn định và tôi muốn đặt ngày thành thời gian cố định cho các bài kiểm tra.
Bất kỳ ý tưởng về cách có thể được thực hiện?
Date
likevalueOf()
.