|
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | import os |
| 3 | +import re |
3 | 4 | from time import sleep |
4 | 5 | import datetime |
5 | 6 |
|
@@ -29,14 +30,15 @@ def setUp(self): |
29 | 30 | self.crawler = MagicMock() |
30 | 31 | self.spider = MetaSpider.from_crawler(self.crawler) |
31 | 32 | self.crawler.spider = self.spider |
32 | | - self.crawl_manager = self._create_crawl_manager() |
| 33 | + self.crawl_manager = self.create_crawl_manager() |
33 | 34 | self.crawl_manager.crawler = self.crawler |
34 | 35 | self.item = Item() |
35 | 36 | self.response = Response('http://localhost') |
36 | 37 | self.another_spider = MetaSpider.from_crawler(self.crawler) |
37 | 38 |
|
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) |
40 | 42 | crawl_manager.crawler = self.crawler |
41 | 43 | return crawl_manager |
42 | 44 |
|
@@ -136,6 +138,33 @@ def test_modify_realtime_request_is_not_callable(self): |
136 | 138 | self.crawl_manager.request, self.spider) |
137 | 139 | self.assertNotEqual(self.request, self.crawl_manager.request) |
138 | 140 |
|
| 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 | + |
139 | 168 |
|
140 | 169 | class TestHandleScheduling(TestCrawlManager): |
141 | 170 |
|
@@ -178,7 +207,7 @@ def test_string_number_timeout_value(self): |
178 | 207 | _timeout = settings.TIMEOUT_LIMIT |
179 | 208 | try: |
180 | 209 | settings.TIMEOUT_LIMIT = '1' |
181 | | - self.crawl_manager = self._create_crawl_manager() |
| 210 | + self.crawl_manager = self.create_crawl_manager() |
182 | 211 | self._test_limit_runtime() |
183 | 212 | finally: |
184 | 213 | settings.TIMEOUT_LIMIT = _timeout |
|
0 commit comments