【问题标题】:Puppeteer mock page request objectPuppeteer 模拟页面请求对象
【发布时间】:2019-02-20 10:44:43
【问题描述】:
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上提供

【问题讨论】:

  • 这回答了您的问题吗?我回答了为什么您在 repo 中的测试代码在您创建的 Sinon 问题中不起作用。
  • 是的,谢谢

标签: node.js mocha.js sinon puppeteer eventemitter


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多