Files
apify--crawlee/packages/core/test/enqueue_links/add-enqueue-strategy-to-requests.ts
2026-07-13 13:23:39 +08:00

65 lines
1.8 KiB
TypeScript

import { load } from 'cheerio';
import type { Source } from 'crawlee';
import { cheerioCrawlerEnqueueLinks, Configuration, EnqueueStrategy, RequestQueue } from 'crawlee';
import log from '@apify/log';
const apifyClient = Configuration.getStorageClient();
const HTML = `
<html>
<head>
<title>Example</title>
</head>
<body>
<ul>
<li>
<a class="first" href="https://menicka.cz/redirect.php?w=akce&id=f1ab8ae200bddaa17fd50150943d1e06">
I'm sorry, Dave. I'm afraid I can't do that.
</a>
</li>
</ul>
</body>
</html>
`;
function createRequestQueueMock() {
const enqueued: Source[] = [];
const requestQueue = new RequestQueue({ id: 'xxx', client: apifyClient });
// @ts-expect-error Override method for testing
requestQueue.addRequests = async function (requests) {
enqueued.push(...requests);
return { processedRequests: requests, unprocessedRequests: [] as never[] };
};
return { enqueued, requestQueue };
}
describe('enqueueLinks() - it should store the enqueue strategy in requests', () => {
let ll: number;
beforeAll(() => {
ll = log.getLevel();
log.setLevel(log.LEVELS.ERROR);
});
afterAll(() => {
log.setLevel(ll);
});
const $ = load(HTML);
test('it should store the enqueue strategy in requests', async () => {
const { enqueued, requestQueue } = createRequestQueueMock();
await cheerioCrawlerEnqueueLinks({
options: { selector: 'a', strategy: EnqueueStrategy.SameHostname },
$,
requestQueue,
originalRequestUrl: 'https://menicka.cz',
});
expect(enqueued[0].userData!.__crawlee.enqueueStrategy).toEqual(EnqueueStrategy.SameHostname);
});
});