From 890f90421b56a0ab60c50d15e41acfebfafedc48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Chaves?= Date: Mon, 10 Mar 2025 10:16:56 +0100 Subject: [PATCH] Test a >5s pure-Twisted delay --- tests/test_spider_yield_seeds.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/test_spider_yield_seeds.py b/tests/test_spider_yield_seeds.py index a65a0fb51..8e8444932 100644 --- a/tests/test_spider_yield_seeds.py +++ b/tests/test_spider_yield_seeds.py @@ -1,11 +1,12 @@ from asyncio import sleep import pytest -from twisted.internet.defer import inlineCallbacks +from twisted.internet.defer import Deferred, inlineCallbacks from twisted.trial.unittest import TestCase from scrapy import Spider, signals from scrapy.core.engine import ExecutionEngine +from scrapy.utils.defer import maybe_deferred_to_future from scrapy.utils.test import get_crawler @@ -39,3 +40,24 @@ class MainTestCase(TestCase): yield {"a": "b"} yield self._test_scenario(Scenario) + + @inlineCallbacks + def test_twisted_delayed(self): + def twisted_sleep(seconds): + d = Deferred() + from twisted.internet import reactor + + reactor.callLater(seconds, d.callback, None) + return d + + class Scenario: + expected_items = [{"a": "b"}] + only_asyncio = True + + async def yield_seeds(self): + await maybe_deferred_to_future( + twisted_sleep(ExecutionEngine._SLOT_HEARTBEAT_INTERVAL + 0.01) + ) + yield {"a": "b"} + + yield self._test_scenario(Scenario)