Skip to content

Commit 489ffcd

Browse files
committed
Add a test for an async item_scraped handler.
1 parent 7687564 commit 489ffcd

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

tests/test_signals.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from twisted.internet import defer
2+
from twisted.trial import unittest
3+
4+
from scrapy import signals, Request, Spider
5+
from scrapy.utils.test import get_crawler
6+
7+
from tests.mockserver import MockServer
8+
9+
10+
class ItemSpider(Spider):
11+
name = 'itemspider'
12+
13+
def start_requests(self):
14+
for _ in range(10):
15+
yield Request(self.mockserver.url('/status?n=200'),
16+
dont_filter=True)
17+
18+
def parse(self, response):
19+
return {'field': 42}
20+
21+
22+
class AsyncSignalTestCase(unittest.TestCase):
23+
def setUp(self):
24+
self.mockserver = MockServer()
25+
self.mockserver.__enter__()
26+
self.items = []
27+
28+
def tearDown(self):
29+
self.mockserver.__exit__(None, None, None)
30+
31+
async def _on_item_scraped(self, item):
32+
self.items.append(item)
33+
34+
@defer.inlineCallbacks
35+
def test_simple_pipeline(self):
36+
crawler = get_crawler(ItemSpider)
37+
crawler.signals.connect(self._on_item_scraped, signals.item_scraped)
38+
yield crawler.crawl(mockserver=self.mockserver)
39+
self.assertEqual(len(self.items), 10)

0 commit comments

Comments
 (0)