robots-txt-parser
Version:
A lightweight robots.txt parser for Node.js with support for wildcards, caching and promises.
70 lines (63 loc) • 3.61 kB
JavaScript
const chai = require('chai');
const exampleRobotsBBC = require('../test-data/example-robots-txt-bbc.js');
const exampleRobotsBcc = require('../test-data/example-robots-txt-bcc.js');
const exampleRobotsKarwei = require('../test-data/example-robots-txt-karwei.js');
const exampleRobotsShort = require('../test-data/example-robots-txt-short.js');
const exampleRobotsZalando = require('../test-data/example-robots-txt-zalando.js');
const parse = require('../../src/parser.js');
const { expect } = chai;
describe('can-parse-test-files', () => {
it('Should completely parse robots-txt-bbc', () => {
const parseResult = parse(exampleRobotsBBC);
const userAgents = Object.keys(parseResult).filter((val) => val !== 'sitemaps' && val !== 'host');
expect(userAgents).to.have.lengthOf(2);
expect(parseResult).to.have.keys(['*', 'magpie-crawler', 'sitemaps']);
expect(parseResult['*'].allow).to.have.lengthOf(0);
expect(parseResult['*'].disallow).to.have.lengthOf(44);
expect(parseResult['magpie-crawler'].allow).to.have.lengthOf(0);
expect(parseResult['magpie-crawler'].disallow).to.have.lengthOf(1);
expect(parseResult.sitemaps).to.have.lengthOf(10);
});
it('Should completely parse robots-txt-bcc', () => {
const parseResult = parse(exampleRobotsBcc);
const userAgents = Object.keys(parseResult).filter((val) => val !== 'sitemaps' && val !== 'host');
expect(userAgents).to.have.lengthOf(1);
expect(parseResult).to.have.keys(['*', 'sitemaps']);
expect(parseResult['*'].allow).to.have.lengthOf(0);
expect(parseResult['*'].disallow).to.have.lengthOf(20);
expect(parseResult.sitemaps).to.have.lengthOf(6);
});
it('Should completely parse robots-txt-karwei', () => {
const parseResult = parse(exampleRobotsKarwei);
const userAgents = Object.keys(parseResult).filter((val) => val !== 'sitemaps' && val !== 'host');
expect(userAgents).to.have.lengthOf(1);
expect(parseResult).to.have.keys(['*', 'sitemaps']);
expect(parseResult['*'].allow).to.have.lengthOf(0);
expect(parseResult['*'].disallow).to.have.lengthOf(33);
expect(parseResult.sitemaps).to.have.lengthOf(1);
});
it('Should completely parse robots-txt-short', () => {
const parseResult = parse(exampleRobotsShort);
const userAgents = Object.keys(parseResult).filter((val) => val !== 'sitemaps' && val !== 'host');
expect(userAgents).to.have.lengthOf(3);
expect(parseResult).to.have.keys(['*', 'longbot', 'morebot', 'sitemaps', 'host']);
expect(parseResult['*'].allow).to.have.lengthOf(3);
expect(parseResult['*'].disallow).to.have.lengthOf(2);
expect(parseResult.morebot.allow).to.have.lengthOf(2);
expect(parseResult.morebot.disallow).to.have.lengthOf(2);
expect(parseResult.longbot.allow).to.have.lengthOf(3);
expect(parseResult.longbot.disallow).to.have.lengthOf(1);
expect(parseResult.sitemaps).to.have.lengthOf(5);
});
it('Should completely parse robots-txt-zalando', () => {
const parseResult = parse(exampleRobotsZalando);
const userAgents = Object.keys(parseResult).filter((val) => val !== 'sitemaps' && val !== 'host');
expect(userAgents).to.have.lengthOf(2);
expect(parseResult).to.have.keys(['*', 'screaming frog seo spider', 'sitemaps']);
expect(parseResult['*'].allow).to.have.lengthOf(0);
expect(parseResult['*'].disallow).to.have.lengthOf(16);
expect(parseResult['screaming frog seo spider'].allow).to.have.lengthOf(0);
expect(parseResult['screaming frog seo spider'].disallow).to.have.lengthOf(1);
expect(parseResult.sitemaps).to.have.lengthOf(0);
});
});