Проблема в том, что CodeceptJS работает внутри браузера, поэтому вам необходимо переопределить объект даты браузера.
В основном вам необходимо переопределить объект даты браузера или используемую функцию,например:
// create a date object for this Friday:
var d = new Date(2018, 0, 20);
//override Date constructor so all newly constructed dates return this Friday
Date = function(){return d;};
var now = new Date()
console.log(now);
Date.now = function () { return d};
console.log(Date.now());
Это способ сделать это в чистом JS, второй шаг - это интеграция в codeceptjs, и это можно сделать, используя I.executeScript
для примера:
I.executeScript(function () {
var d = new Date(2018, 0, 20);
Date = function(){return d;};
})
Вы также можете создать пользовательский шаг, например, I.fakeDate (new Date (2018, 0, 20))
module.exports = function() {
return actor({
fakeDate: function(date) {
I.executeScript(function (fakeDate) {
var d = fakeDate;
window.__original_date = Date;
Date = function(){return d;};
}, date);
},
fakeDateRestore: function() {
I.executeScript(function () {
Date = window.__original_date;
});
}
});
}
Тогда вы просто подделаете дату, когдавам нужно, и восстановите его.
I.Click('beofre');
I.fakeDate(new Date(2018,10,01));
// The test code here
I.fakeDateRestore();
Надеюсь, это поможет @ :-)