Rém*_*ski 4 google-chrome-headless puppeteer
我正在尝试设置 puppeteer 来运行一些性能测试。我想将日期覆盖为特定值,以便我可以模拟我的应用程序需要的数据,而无需根据日期动态生成内容。
如何覆盖 puppeteer 浏览器的日期?
小智 6
我们找到了一种更简单的方法来模拟 puppeteer 中的日期。这是我们的例子:
page.evaluate(() => {
Date.now = () => {
return 1539806611024;
};
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我最终遇到了同样的问题。这就是我设法解决它的方法:
// mock date of document
if (!page.dateIsMocked) {
page.dateIsMocked = true
await page.evaluateOnNewDocument(() => {
var _Date = Date,
_getTimezoneOffset = Date.prototype.getTimezoneOffset,
now = null
function MockDate(y, m, d, h, M, s, ms) {
var date
switch (arguments.length) {
case 0:
if (now !== null) {
date = new _Date(now)
} else {
date = new _Date()
}
break
case 1:
date = new _Date(y)
break
default:
d = typeof d === 'undefined' ? 1 : d
h = h || 0
M = M || 0
s = s || 0
ms = ms || 0
date = new _Date(y, m, d, h, M, s, ms)
break
}
return date
}
MockDate.UTC = _Date.UTC
MockDate.now = function() {
return new MockDate().valueOf()
}
MockDate.parse = function(dateString) {
return _Date.parse(dateString)
}
MockDate.toString = function() {
return _Date.toString()
}
MockDate.prototype = _Date.prototype
function set(date, timezoneOffset) {
var dateObj = new Date(date)
if (isNaN(dateObj.getTime())) {
throw new TypeError(
'mockdate: The time set is an invalid date: ' + date
)
}
if (typeof timezoneOffset === 'number') {
MockDate.prototype.getTimezoneOffset = function() {
return timezoneOffset
}
}
Date = MockDate
now = dateObj.valueOf()
}
// mock date
set(1577840400000)
})
}
Run Code Online (Sandbox Code Playgroud)
模拟 Date 的实际逻辑是从MockDate 库借用的。
| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |