1 |
|
2 | 'use strict';
|
3 |
|
4 | const Crawler = require('../lib/crawler');
|
5 | const expect = require('chai').expect;
|
6 | const sinon = require('sinon');
|
7 |
|
8 |
|
9 | const nock = require('nock');
|
10 |
|
11 |
|
12 | let cb;
|
13 | let crawler;
|
14 |
|
15 | describe('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 |