ฉันใช้ moment.js เพื่อใช้ตรรกะวันที่ส่วนใหญ่ในไฟล์ตัวช่วยสำหรับส่วนประกอบ React ของฉัน แต่ฉันไม่สามารถหาวิธีล้อเลียนวันที่ใน Jest a la sinon.useFakeTimers()
ได้
เอกสารล้อเล่นเท่านั้นพูดเกี่ยวกับฟังก์ชั่นจับเวลาเหมือน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);
});
});
});
ตอนนี้การทดสอบเหล่านี้ผ่านไปเพราะฉันใช้โมเมนต์และฟังก์ชันของฉันใช้โมเมนต์ แต่ดูเหมือนจะไม่เสถียรเล็กน้อยและฉันต้องการกำหนดวันที่เป็นเวลาที่แน่นอนสำหรับการทดสอบ
มีความคิดว่าจะทำได้อย่างไร?
Date
valueOf()