Skip to content

Commit caf894e

Browse files
authored
Call loadResource only for responded resources (#176)
1 parent b2a18e3 commit caf894e

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

lib/scraper.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,10 @@ Scraper.prototype.load = function load () {
157157
return self.fsAdapter.createDirectory().then(function loadAllResources () {
158158
return Promise.map(self.originalResources, function loadResource (originalResource) {
159159
return self.requestResource(originalResource).then(function receivedResponse (resOriginalResource) {
160-
// Do not wait for loadResource here, to prevent deadlock, scraper.waitForLoad
161-
self.loadResource(resOriginalResource);
160+
if (resOriginalResource) {
161+
// Do not wait for loadResource here, to prevent deadlock, scraper.waitForLoad
162+
self.loadResource(resOriginalResource);
163+
}
162164
});
163165
}).then(self.waitForLoad.bind(self));
164166
});

test/unit/scraper-test.js

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ describe('Scraper', function () {
120120
});
121121
});
122122

123-
it('should call loadResource for each url', function(done) {
123+
it('should call loadResource for each url', function() {
124124
nock('http://first-url.com').get('/').reply(200, 'OK');
125125
nock('http://second-url.com').get('/').reply(200, 'OK');
126126

@@ -133,13 +133,35 @@ describe('Scraper', function () {
133133
});
134134

135135
var loadResourceSpy = sinon.spy(s, 'loadResource');
136-
s.load().then(function() {
136+
return s.load().then(function() {
137137
loadResourceSpy.calledTwice.should.be.eql(true);
138-
done();
139-
}).catch(done);
138+
});
139+
});
140+
141+
it('should not call loadResource if no resource was returned', function() {
142+
nock('http://first-url.com').get('/').reply(200, 'OK');
143+
nock('http://second-url.com').get('/').reply(200, 'OK');
144+
145+
var s = new Scraper({
146+
urls: [
147+
'http://first-url.com',
148+
'http://second-url.com'
149+
],
150+
directory: testDirname
151+
});
152+
153+
var loadResourceSpy = sinon.spy(s, 'loadResource');
154+
var requestStub = sinon.stub(s, 'requestResource');
155+
requestStub.onCall(0).resolves(null);
156+
requestStub.onCall(1).resolves(new Resource('http://second-url.com'));
157+
158+
return s.load().then(function() {
159+
loadResourceSpy.calledOnce.should.be.eql(true);
160+
loadResourceSpy.args[0][0].url.should.be.eql('http://second-url.com');
161+
});
140162
});
141163

142-
it('should return array of objects with url, filename and children', function(done) {
164+
it('should return array of objects with url, filename and children', function() {
143165
nock('http://first-url.com').get('/').reply(200, 'OK');
144166
nock('http://second-url.com').get('/').reply(500);
145167

@@ -151,13 +173,12 @@ describe('Scraper', function () {
151173
directory: testDirname
152174
});
153175

154-
s.load().then(function(res) {
176+
return s.load().then(function(res) {
155177
res.should.be.instanceOf(Array);
156178
res.should.have.length(2);
157179
res[0].should.be.instanceOf(Resource).and.have.properties(['url', 'filename', 'children']);
158180
res[1].should.be.instanceOf(Resource).and.have.properties(['url', 'filename', 'children']);
159-
done();
160-
}).catch(done);
181+
});
161182
});
162183
});
163184

0 commit comments

Comments
 (0)