【发布时间】:2015-06-25 12:15:26
【问题描述】:
我正在使用 moment.js 在我的 React 组件的帮助文件中执行大部分日期逻辑,但我无法弄清楚如何在 Jest a la sinon.useFakeTimers() 中模拟日期。
Jest 文档只讨论了 setTimeout、setInterval 等计时器功能,但没有帮助设置日期,然后检查我的日期功能是否符合它们的预期。
这是我的一些 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 设置的:
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);
});
});
});
现在这些测试通过了,因为我正在使用 moment,而我的函数使用 moment,但它似乎有点不稳定,我想将日期设置为测试的固定时间。
你知道如何实现吗?
【问题讨论】:
-
你能选择一个不同的答案吗,因为 jest 现在有内置的日期模拟功能?
标签: javascript jestjs momentjs