Puppeteer模拟页面请求对象

问题描述 投票:0回答:1
import { Page } from 'puppeteer/lib/Page';
export class MonitorRequestHelper {
   public static monitorRequests(page: Page, on = false) {
    if(on) {
      page.on('request', req => {
        if (['image', 'font', 'stylesheet'].includes(req.resourceType())) {
          // Abort requests for images, fonts & stylesheets to increase page load speed.

          req.abort();
        } else {
          req.continue();
        }
      });
    } else {
      return true;
    }
  }
}

我试图模拟和间谍功能,以检查它是否至少被调用一次。此外,如果有人解释我如何模拟和间谍事件 - 发射器对象将是有帮助的。源代码可在https://github.com/Mukesh23singh/puppeteer-unit-testing上找到

node.js mocha sinon puppeteer eventemitter
1个回答
1
投票

如果你想测试monitorRequests中的逻辑是否有效,你需要传入一个假的Page对象,它带有一个事件发射器接口,它产生一个你可以测试的假请求。

就像是:

import {spy} from 'sinon;

// Arrange
const fakePage = { on(type, cb) { this[type] = cb; } }; // "event emitter"
const fakeRequest = { 
  abort: sinon.spy(),
  resourceType() { return 'image'; }
};
monitorRequests( fakePage, true );

// Act
// trigger fake request
fakePage['request'](fakeRequest);

// Assert
assert(fakeRequest.abort.called);
© www.soinside.com 2019 - 2024. All rights reserved.