首页 > 解决方案 > 如何使用 Jest 模拟远程网站对单元测试 Puppeteer 代码的响应?

问题描述

我正在为一个收集一些有用信息的网站实现一个网络抓取脚本。

脚本是使用 Puppeteer 库实现的,基本上是一组指令,例如:

  1. 启动无头镀铬
  2. 打开新标签/页面
  3. 从 HTML 中获取一些分页链接
  4. 打开找到的每个分页链接并从 HTML 中抓取一些信息

我正在寻找某种测试此功能的方法。理想情况下,我想做的是在测试文件夹中“预先保存”真实的 HTML 响应,然后模拟外部网站响应(确保它们始终相同)。然后断言收集的信息是正确的。

我熟悉几种能够模拟端点以fetch在浏览器中运行的工具。我正在寻找类似的东西,但对于Puppeteer.

到目前为止,我正在考虑的唯一解决方案是将browser实例用作我的脚本的依赖项。然后模拟newPage浏览器的方法返回一个带有自定义拦截器的页面。不过,这看起来需要做很多工作。

对此还有其他解决方案吗?

标签: unit-testingjestjspuppeteer

解决方案


一个简单的解决方案是将要测试的 HTML 页面(或其中的一部分)存储在本地,然后在 Puppeteer 中打开它。可以在 Puppeteer 中打开本地 HTML 网站。然后可以在 Mocha 或 Jest 等 Javascript 测试框架中测试结果。

如果您需要一个真正的 Web 服务器进行测试,另一种选择是使用Express之类的库来提供本地 HTML 页面作为 Web 服务器响应的模拟。您可以在这个搜索引擎抓取工具中找到一个示例,其中包含用于抓取各种搜索引擎的测试。

也可以模拟和存根 Puppeteer 函数,如launch, goto$eval. 这种方法需要很多存根方法。


推荐阅读