@@ -71,6 +71,21 @@ async def server() -> AsyncGenerator[respx.MockRouter, None]:
71
71
</html>""" ,
72
72
)
73
73
74
+ mock .get ('/json' , name = 'json_endpoint' ).return_value = Response (
75
+ 200 ,
76
+ text = """{
77
+ "hello": "world"
78
+ }""" ,
79
+ )
80
+
81
+ mock .get ('/xml' , name = 'xml_endpoint' ).return_value = Response (
82
+ 200 ,
83
+ text = """
84
+ <?xml version="1.0"?>
85
+ <hello>world</hello>
86
+ """ ,
87
+ )
88
+
74
89
generic_response = Response (
75
90
200 ,
76
91
text = """<html>
@@ -225,3 +240,37 @@ def test_import_error_handled() -> None:
225
240
"To import anything from this subpackage, you need to install the 'parsel' extra."
226
241
"For example, if you use pip, run `pip install 'crawlee[parsel]'`."
227
242
)
243
+
244
+
245
+ async def test_json (server : respx .MockRouter ) -> None :
246
+ crawler = ParselCrawler (request_provider = RequestList (['https://test.io/json' ]))
247
+ handler = mock .AsyncMock ()
248
+
249
+ @crawler .router .default_handler
250
+ async def request_handler (context : ParselCrawlingContext ) -> None :
251
+ result = context .selector .jmespath ('hello' ).getall ()
252
+ await handler (result )
253
+
254
+ await crawler .run ()
255
+
256
+ assert server ['json_endpoint' ].called
257
+ assert handler .called
258
+
259
+ assert handler .call_args [0 ][0 ] == ['world' ]
260
+
261
+
262
+ async def test_xml (server : respx .MockRouter ) -> None :
263
+ crawler = ParselCrawler (request_provider = RequestList (['https://test.io/xml' ]))
264
+ handler = mock .AsyncMock ()
265
+
266
+ @crawler .router .default_handler
267
+ async def request_handler (context : ParselCrawlingContext ) -> None :
268
+ result = context .selector .css ('hello' ).getall ()
269
+ await handler (result )
270
+
271
+ await crawler .run ()
272
+
273
+ assert server ['xml_endpoint' ].called
274
+ assert handler .called
275
+
276
+ assert handler .call_args [0 ][0 ] == ['<hello>world</hello>' ]
0 commit comments