60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { tap, expect } from '@git.zone/tstest/tapbundle';
 | |
| import { SmartRequest } from '../ts/index.js';
 | |
| 
 | |
| tap.test('should clear timeout when request completes before timeout', async () => {
 | |
|   // Set a long timeout that would keep the process alive if not cleared
 | |
|   const response = await SmartRequest.create()
 | |
|     .url('https://httpbin.org/delay/1') // 1 second delay
 | |
|     .timeout(10000) // 10 second timeout (much longer than needed)
 | |
|     .get();
 | |
|   
 | |
|   const data = await response.json();
 | |
|   expect(data).toBeDefined();
 | |
|   
 | |
|   // The test should complete quickly, not wait for the 10 second timeout
 | |
|   // If the timeout isn't cleared, the process would hang for 10 seconds
 | |
| });
 | |
| 
 | |
| tap.test('should timeout when request takes longer than timeout', async () => {
 | |
|   let errorThrown = false;
 | |
|   
 | |
|   try {
 | |
|     // Try to fetch with a very short timeout
 | |
|     await SmartRequest.create()
 | |
|       .url('https://httpbin.org/delay/3') // 3 second delay
 | |
|       .timeout(100) // 100ms timeout (will fail)
 | |
|       .get();
 | |
|   } catch (error) {
 | |
|     errorThrown = true;
 | |
|     expect(error.message).toContain('Request timed out');
 | |
|   }
 | |
|   
 | |
|   expect(errorThrown).toBeTrue();
 | |
| });
 | |
| 
 | |
| tap.test('should not leak timers with multiple successful requests', async () => {
 | |
|   // Make multiple requests with timeouts to ensure no timer leaks
 | |
|   const promises = [];
 | |
|   
 | |
|   for (let i = 0; i < 5; i++) {
 | |
|     promises.push(
 | |
|       SmartRequest.create()
 | |
|         .url('https://httpbin.org/get')
 | |
|         .timeout(5000) // 5 second timeout
 | |
|         .get()
 | |
|         .then(response => response.json())
 | |
|     );
 | |
|   }
 | |
|   
 | |
|   const results = await Promise.all(promises);
 | |
|   
 | |
|   // All requests should complete successfully
 | |
|   expect(results).toHaveLength(5);
 | |
|   results.forEach(result => {
 | |
|     expect(result).toBeDefined();
 | |
|   });
 | |
|   
 | |
|   // Process should exit cleanly after this test without hanging
 | |
| });
 | |
| 
 | |
| export default tap.start(); |