typescript - 如何在 Puppeteer with Jest 中使用 page.evaluate 中的导入函数?
问题描述
我有一个使用 Jest 进行单元测试的 TypeScript 项目,并且刚刚将 Puppeteer 添加到混合中,目的是在客户端上运行一些测试。它工作正常,除非我尝试在page.evaluate
.
例如,我有以下内容HdpiCanvas.test.ts
:
import { createHdpiCanvas } from "./HdpiCanvas";
test("createHdpiCanvas", async () => {
await page.setViewport({ width: 800, height: 600, deviceScaleFactor: 2 });
let size = await page.evaluate(() => {
const canvas = createHdpiCanvas(); // document.createElement('canvas');
return [canvas.width, canvas.height];
});
console.log(size); // [600, 300] for HDPI canvas and [ 300, 150 ] for a regular one
});
注释掉后document.createElement('canvas')
,测试运行良好并记录了[ 300, 150 ]
。但是函数createHdpiCanvas()
会抛出以下错误page.evaluate
:
Error: Evaluation failed: ReferenceError: HdpiCanvas_1 is not defined
at __puppeteer_evaluation_script__:2:24
实际createHdpiCanvas
内部HdpiCanvas.ts
定义如下:
export function createHdpiCanvas(width = 300, height = 150): HTMLCanvasElement {
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
applyHdpiOverrides(canvas);
return canvas;
}
并且本身依赖于 中定义的其他函数HdpiCanvas.ts
,例如applyHdpiOverrides
.
解决方案
你可以在调用evaluate
函数之前这样做:
await page.exposeFunction("applyHdpiOverrides",applyHdpiOverrides);
await page.exposeFunction("createHdpiCanvas",createHdpiCanvas);
现在您的窗口将识别这些功能
推荐阅读
- sql-server-2008-r2 - 无法在 CSV 文件中应用 SQL Server 2008 R2 中的任何查询?
- javascript - 制作 DOM 的副本
- python - django 模板不存在 execpt home url
- r - r 根据条件生成具有值的列
- r - 使用 plot.matrix 更改轴标记
- discord.py-rewrite - Discord.py bot 禁用在所有频道中发送消息
- reactjs - React/Security - 可以检查 React 路由吗?
- optimization - 如何计算前一周市场开盘的时段数
- python - 如果我删除我的 css,在我的关于 django 模板的页面中面对这个问题,那么它工作得很好,否则每当我用来显示图像时它都会给我一个错误
- if-statement - Pine 脚本交易,无法使用 If else 语句