UNPKG

2.9 kBJavaScriptView Raw
1/*jshint expr:true */
2'use strict';
3
4const Crawler = require('../lib/crawler');
5const expect = require('chai').expect;
6const sinon = require('sinon');
7
8// settings for nock to mock http server
9const nock = require('nock');
10
11// init variables
12let cb;
13let crawler;
14
15describe('Direct feature tests', function() {
16
17 before(function() {
18 nock.cleanAll();
19 nock('http://test.crawler.com').get('/').reply(200, 'ok').persist();
20 });
21
22 beforeEach(function() {
23 cb = sinon.spy();
24 crawler = new Crawler({
25 jQuery: false,
26 rateLimit: 100,
27 preRequest: (options, done) => {
28 cb('preRequest');
29 done();
30 },
31 callback: (err, res, done) => {
32 if (err) {
33 cb('error');
34 } else {
35 cb('callback');
36 }
37 done();
38 }
39 });
40 crawler.on('request', () => {
41 cb('Event:request');
42 });
43 });
44
45 it('should not trigger preRequest or callback of crawler instance', function(finishTest) {
46 crawler.direct({
47 uri: 'http://test.crawler.com/',
48 callback: (error, res) => {
49 expect(error).to.be.null;
50 expect(res.statusCode).to.equal(200);
51 expect(res.body).to.equal('ok');
52 expect(cb.called).to.be.false;
53 finishTest();
54 }
55 });
56 });
57
58 it('should be sent directly regardless of current queue of crawler', function(finishTest) {
59 crawler.queue({
60 uri: 'http://test.crawler.com/',
61 callback: (error, res, done) => {
62 expect(error).to.be.null;
63 crawler.direct({
64 uri: 'http://test.crawler.com/',
65 callback: () => {
66 expect(cb.getCalls().length).to.equal(2);
67 cb('direct');
68 }
69 });
70 done();
71 }
72 });
73 crawler.queue('http://test.crawler.com/');
74 crawler.queue('http://test.crawler.com/');
75 crawler.queue({
76 uri: 'http://test.crawler.com/',
77 callback: (error, res, done) => {
78 expect(error).to.be.null;
79 let seq = ['preRequest','Event:request','direct','preRequest','Event:request','callback','preRequest','Event:request','callback','preRequest','Event:request'];
80 expect(cb.getCalls().map(c => c.args[0]).join()).to.equal(seq.join());
81 expect(cb.getCalls().length).to.equal(11);
82 done();
83 finishTest();
84 }
85 });
86 });
87
88 it('should not trigger Event:request by default', function(finishTest) {
89 crawler.direct({
90 uri: 'http://test.crawler.com/',
91 callback: (error, res) => {
92 expect(error).to.be.null;
93 expect(res.statusCode).to.equal(200);
94 expect(res.body).to.equal('ok');
95 expect(cb.called).to.be.false;
96 finishTest();
97 }
98 });
99 });
100
101 it('should trigger Event:request if specified in options', function(finishTest) {
102 crawler.direct({
103 uri: 'http://test.crawler.com/',
104 skipEventRequest: false,
105 callback: (error, res) => {
106 expect(error).to.be.null;
107 expect(res.statusCode).to.equal(200);
108 expect(res.body).to.equal('ok');
109 expect(cb.calledOnce).to.be.true;
110 expect(cb.firstCall.args[0]).to.equal('Event:request');
111 finishTest();
112 }
113 });
114 });
115});
\No newline at end of file