木偶模拟页面请求对象

时间:2019-02-20 10:44:43

标签: node.js mocha sinon puppeteer eventemitter

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

1 个答案:

答案 0 :(得分: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);