Skip to content

Commit 8195e7a

Browse files
committed
[tests/crawl_manager] add unit tests for adding errback to request
1 parent aee93ee commit 8195e7a

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

tests/test_crawl_manager.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22
import os
3+
import re
34
from time import sleep
45
import datetime
56

@@ -29,14 +30,15 @@ def setUp(self):
2930
self.crawler = MagicMock()
3031
self.spider = MetaSpider.from_crawler(self.crawler)
3132
self.crawler.spider = self.spider
32-
self.crawl_manager = self._create_crawl_manager()
33+
self.crawl_manager = self.create_crawl_manager()
3334
self.crawl_manager.crawler = self.crawler
3435
self.item = Item()
3536
self.response = Response('http://localhost')
3637
self.another_spider = MetaSpider.from_crawler(self.crawler)
3738

38-
def _create_crawl_manager(self):
39-
crawl_manager = CrawlManager(self.spider.name, self.kwargs.copy())
39+
def create_crawl_manager(self, kwargs=None):
40+
kwargs = kwargs if kwargs else self.kwargs.copy()
41+
crawl_manager = CrawlManager(self.spider.name, kwargs)
4042
crawl_manager.crawler = self.crawler
4143
return crawl_manager
4244

@@ -136,6 +138,33 @@ def test_modify_realtime_request_is_not_callable(self):
136138
self.crawl_manager.request, self.spider)
137139
self.assertNotEqual(self.request, self.crawl_manager.request)
138140

141+
def test_pass_wrong_spider_errback(self):
142+
mng = self.create_crawl_manager(
143+
{'url': 'http://localhost', 'errback': 'handle_error'}
144+
)
145+
try:
146+
with pytest.raises(AttributeError) as err:
147+
mng.spider_idle(self.spider)
148+
except DontCloseSpider:
149+
pass
150+
151+
assert mng.request.errback is None
152+
msg = "AttributeError: 'MetaSpider' object has no attribute 'handle_error'"
153+
assert re.search(msg, str(err))
154+
155+
def test_pass_good_spider_errback(self):
156+
mng = self.create_crawl_manager(
157+
{'url': 'http://localhost', 'errback': 'handle_error'}
158+
)
159+
self.crawler.spider.handle_error = lambda x: x
160+
try:
161+
mng.spider_idle(self.spider)
162+
except DontCloseSpider:
163+
pass
164+
165+
assert callable(mng.request.errback)
166+
assert mng.request.errback('something') == 'something'
167+
139168

140169
class TestHandleScheduling(TestCrawlManager):
141170

@@ -178,7 +207,7 @@ def test_string_number_timeout_value(self):
178207
_timeout = settings.TIMEOUT_LIMIT
179208
try:
180209
settings.TIMEOUT_LIMIT = '1'
181-
self.crawl_manager = self._create_crawl_manager()
210+
self.crawl_manager = self.create_crawl_manager()
182211
self._test_limit_runtime()
183212
finally:
184213
settings.TIMEOUT_LIMIT = _timeout

0 commit comments

Comments
 (0)