196 lines
7.5 KiB
TypeScript
196 lines
7.5 KiB
TypeScript
import { PuppeteerPlugin } from '@crawlee/browser-pool';
|
|
import puppeteer from 'puppeteer';
|
|
|
|
import type { Log } from '@apify/log';
|
|
import log from '@apify/log';
|
|
|
|
import { MemoryStorageEmulator } from '../../../test/shared/MemoryStorageEmulator';
|
|
import { BrowserCrawler, RequestList } from '../src/index';
|
|
|
|
const localStorageEmulator = new MemoryStorageEmulator();
|
|
|
|
beforeEach(async () => {
|
|
await localStorageEmulator.init();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await localStorageEmulator.destroy();
|
|
});
|
|
|
|
const plugin = new PuppeteerPlugin(puppeteer);
|
|
|
|
describe('Moving from handleRequest* to requestHandler*', () => {
|
|
let requestList: RequestList;
|
|
let testLogger: Log;
|
|
|
|
beforeEach(async () => {
|
|
requestList = await RequestList.open(null, []);
|
|
testLogger = log.child({ prefix: 'BrowserCrawler' });
|
|
});
|
|
|
|
describe('handlePageFunction -> requestHandler', () => {
|
|
it('should log when providing both handlePageFunction and requestHandler', async () => {
|
|
const oldHandler = () => {};
|
|
const newHandler = () => {};
|
|
const warningSpy = vitest.spyOn(testLogger, 'warning');
|
|
|
|
// @ts-expect-error -- Protected constructor
|
|
const crawler = new BrowserCrawler({
|
|
requestList,
|
|
log: testLogger,
|
|
browserPoolOptions: {
|
|
browserPlugins: [plugin],
|
|
},
|
|
requestHandler: newHandler,
|
|
handlePageFunction: oldHandler,
|
|
});
|
|
|
|
expect(warningSpy).toHaveBeenCalledWith<[string]>(
|
|
[
|
|
`Both "requestHandler" and "handlePageFunction" were provided in the crawler options.`,
|
|
`"handlePageFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
|
|
`As such, "requestHandler" will be used instead.`,
|
|
].join('\n'),
|
|
);
|
|
|
|
// eslint-disable-next-line dot-notation -- accessing private property
|
|
expect(crawler['userProvidedRequestHandler']).toBe(newHandler);
|
|
|
|
await crawler.browserPool.destroy();
|
|
});
|
|
|
|
it('should log when providing only the deprecated handlePageFunction', async () => {
|
|
const oldHandler = () => {};
|
|
const warningSpy = vitest.spyOn(testLogger, 'warning');
|
|
|
|
// @ts-expect-error -- We are verifying the deprecation warning
|
|
const crawler = new BrowserCrawler({
|
|
requestList,
|
|
log: testLogger,
|
|
browserPoolOptions: {
|
|
browserPlugins: [plugin],
|
|
},
|
|
handlePageFunction: oldHandler,
|
|
});
|
|
|
|
expect(warningSpy).toHaveBeenCalledWith<[string]>(
|
|
[
|
|
`"handlePageFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
|
|
`The provided value will be used, but you should rename "handlePageFunction" to "requestHandler" in your crawler options.`,
|
|
].join('\n'),
|
|
);
|
|
|
|
// eslint-disable-next-line dot-notation -- accessing private property
|
|
expect(crawler['userProvidedRequestHandler']).toBe(oldHandler);
|
|
|
|
await crawler.browserPool.destroy();
|
|
});
|
|
|
|
it('should not log when providing only requestHandler', async () => {
|
|
const handler = () => {};
|
|
const warningSpy = vitest.spyOn(testLogger, 'warning');
|
|
|
|
// @ts-expect-error -- Protected constructor
|
|
const crawler = new BrowserCrawler({
|
|
requestList,
|
|
log: testLogger,
|
|
browserPoolOptions: {
|
|
browserPlugins: [plugin],
|
|
},
|
|
requestHandler: handler,
|
|
});
|
|
|
|
expect(warningSpy).not.toHaveBeenCalled();
|
|
|
|
// eslint-disable-next-line dot-notation -- accessing private property
|
|
expect(crawler['userProvidedRequestHandler']).toBe(handler);
|
|
|
|
await crawler.browserPool.destroy();
|
|
});
|
|
});
|
|
|
|
describe('handleFailedRequestFunction -> failedRequestHandler', () => {
|
|
it('should log when providing both handleFailedRequestFunction and failedRequestHandler', async () => {
|
|
const oldHandler = () => {};
|
|
const newHandler = () => {};
|
|
const warningSpy = vitest.spyOn(testLogger, 'warning');
|
|
|
|
// @ts-expect-error -- Protected constructor
|
|
const crawler = new BrowserCrawler({
|
|
requestList,
|
|
log: testLogger,
|
|
browserPoolOptions: {
|
|
browserPlugins: [plugin],
|
|
},
|
|
requestHandler: () => {},
|
|
failedRequestHandler: newHandler,
|
|
handleFailedRequestFunction: oldHandler,
|
|
});
|
|
|
|
expect(warningSpy).toHaveBeenCalledWith<[string]>(
|
|
[
|
|
`Both "failedRequestHandler" and "handleFailedRequestFunction" were provided in the crawler options.`,
|
|
`"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
|
|
`As such, "failedRequestHandler" will be used instead.`,
|
|
].join('\n'),
|
|
);
|
|
|
|
// eslint-disable-next-line dot-notation -- accessing private property
|
|
expect(crawler['failedRequestHandler']).toBe(newHandler);
|
|
|
|
await crawler.browserPool.destroy();
|
|
});
|
|
|
|
it('should log when providing only the deprecated handleFailedRequestFunction', async () => {
|
|
const oldHandler = () => {};
|
|
const warningSpy = vitest.spyOn(testLogger, 'warning');
|
|
|
|
// @ts-expect-error -- Protected constructor
|
|
const crawler = new BrowserCrawler({
|
|
requestList,
|
|
log: testLogger,
|
|
browserPoolOptions: {
|
|
browserPlugins: [plugin],
|
|
},
|
|
requestHandler: () => {},
|
|
handleFailedRequestFunction: oldHandler,
|
|
});
|
|
|
|
expect(warningSpy).toHaveBeenCalledWith<[string]>(
|
|
[
|
|
`"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
|
|
`The provided value will be used, but you should rename "handleFailedRequestFunction" to "failedRequestHandler" in your crawler options.`,
|
|
].join('\n'),
|
|
);
|
|
|
|
// eslint-disable-next-line dot-notation -- accessing private property
|
|
expect(crawler['failedRequestHandler']).toBe(oldHandler);
|
|
|
|
await crawler.browserPool.destroy();
|
|
});
|
|
|
|
it('should not log when providing only failedRequestHandler', async () => {
|
|
const handler = () => {};
|
|
const warningSpy = vitest.spyOn(testLogger, 'warning');
|
|
|
|
// @ts-expect-error -- Protected constructor
|
|
const crawler = new BrowserCrawler({
|
|
requestList,
|
|
log: testLogger,
|
|
browserPoolOptions: {
|
|
browserPlugins: [plugin],
|
|
},
|
|
requestHandler: () => {},
|
|
failedRequestHandler: handler,
|
|
});
|
|
|
|
expect(warningSpy).not.toHaveBeenCalled();
|
|
|
|
// eslint-disable-next-line dot-notation -- accessing private property
|
|
expect(crawler['failedRequestHandler']).toBe(handler);
|
|
|
|
await crawler.browserPool.destroy();
|
|
});
|
|
});
|
|
});
|