Add integration tests for modifying settings via args.

This commit is contained in:
Andrey Rakhmatullin 2023-09-12 20:16:26 +04:00
parent 1a0572ad02
commit 77f39be407
3 changed files with 51 additions and 0 deletions

View File

@ -0,0 +1,24 @@
from typing import Any
import scrapy
from scrapy.crawler import Crawler, CrawlerProcess
class NoRequestsSpider(scrapy.Spider):
name = "no_request"
@classmethod
def from_crawler(cls, crawler: Crawler, *args: Any, **kwargs: Any):
spider = super().from_crawler(crawler, *args, **kwargs)
spider.settings.set("FOO", kwargs.get("foo"))
return spider
def start_requests(self):
self.logger.info(f"The value of FOO is {self.settings.getint('FOO')}")
return []
process = CrawlerProcess(settings={})
process.crawl(NoRequestsSpider, foo=42)
process.start()

View File

@ -965,6 +965,28 @@ class MySpider(scrapy.Spider):
log,
)
def test_args_change_settings(self):
spider_code = """
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super().from_crawler(crawler, *args, **kwargs)
spider.settings.set("FOO", kwargs.get("foo"))
return spider
def start_requests(self):
self.logger.info(f"The value of FOO is {self.settings.getint('FOO')}")
return []
"""
args = ["-a", "foo=42"]
log = self.get_log(spider_code, args=args)
self.assertIn("Spider closed (finished)", log)
self.assertIn("The value of FOO is 42", log)
@skipIf(platform.system() != "Windows", "Windows required for .pyw files")
class WindowsRunSpiderCommandTest(RunSpiderCommandTest):

View File

@ -481,6 +481,11 @@ class CrawlerProcessSubprocess(ScriptRunnerMixin, unittest.TestCase):
self.assertNotIn("Using asyncio event loop: uvloop.Loop", log)
self.assertIn("async pipeline opened!", log)
def test_args_change_settings(self):
log = self.run_script("args_settings.py")
self.assertIn("Spider closed (finished)", log)
self.assertIn("The value of FOO is 42", log)
class CrawlerRunnerSubprocess(ScriptRunnerMixin, unittest.TestCase):
script_dir = Path(__file__).parent.resolve() / "CrawlerRunner"